請問什麼是method signature 方法簽名?? - JWorld@TW Java論壇
文章推薦指數: 80 %
請問所謂的signature ”簽名”, 一詞是不是指method 的”語法格式” 之意. 如果是這樣那我就明瞭了. 謝謝各位JAVA 先進們的熱心回答, 謝謝你們 ...
JWorld@TW
thebestprofessionalJavasiteinTaiwan
註冊|
登入|
全文檢索|
排行榜
» JWorld@TW
» Java新手區
列印話題
寄給朋友
訂閱主題
無標籤
Census
發文:4
積分:0
於2007-02-1003:32
新手提問:請問什麼是methodsignature”方法簽名”以及”引數簽名”這些詞彙讓我感到困惑??我的第一本書所教導的method的"語法格式"..我了解但是我的第二本書裡又提到了,"methodsignature"方法簽名及引數簽名。
這些詞彙讓我感到困惑??請問所謂的signature”簽名”,一詞是不是指method的”語法格式”之意.如果是這樣那我就明瞭了.謝謝各位JAVA先進們的熱心回答,謝謝你們
psychokiller
發文:581
積分:1
於2007-02-1011:01
signaturemethod的namemethod的arguementmethod的returntype
Duncan
還隱隱作痛
版主
發文:7816
積分:39
於2007-02-1014:04
psychokillerwrote:signaturemethod的namemethod的arguementtypeandordermethod的returntype<=====這不包括在1.5以前,signature的意義是methodname+parametertypeandorder。
1.5引進generics後,signature的意義稍有不同,signature會再加上描述genericfield,methodandtype的generics資訊。
如果在文脈中沒有跟generics有關,一般signature指的是method的name+parametertypeandorder用以決定method的唯一性。
給我辣味豆腐其餘免談
Census
發文:4
積分:0
於2007-02-1101:12
版主Duncan...您好不好意思,我想進一步了解是何意...真是不好意.....希望不會造成版主Duncan您...太大的困擾...如果太麻煩..可以不要理會我的要求..(真的很抱歉)可否請你為以下這段話...寫一小段程式碼語法例子1.5引進generics後,signature的意義稍有不同,signature會再加上描述genericfield,methodandtype的generics資訊謝謝你2007.02.11......00:52
Duncan
還隱隱作痛
版主
發文:7816
積分:39
於2007-02-1102:15
Censuswrote:版主Duncan...您好不好意思,我想進一步了解是何意...真是不好意..:I...希望不會造成版主Duncan您...太大的困擾...如果太麻煩..可以不要理會我的要求..(真的很抱歉)可否請你為以下這段話...寫一小段程式碼語法例子1.5引進generics後,signature的意義稍有不同,signature會再加上描述genericfield,methodandtype的generics資訊希望你可以了解,一般提到的"methodsignature",它並不是一種寫法(語法),它可以說是一個method的一種規格(名稱與需要的參數型態/順序),如果一個class內有兩個methods的signature相同(名稱相同,參數數量與參數型別及順序都完全相同),就不符合JavaPL的規範。
比如:1234publicclassFoo{
publicvoidbar(Strings){...}
publicvoidbar(Strings,intn){...}
}
兩個barmethod的參數數量不同,兩者的signature不同,形成一組overloadingmethods。
因此平常談論時就不應該只講"某某class的某某method",因為該"某某"class可以有數個名稱皆為"某某"的method,必須把參數型態/順序也一併指明(也就是要講明methodsignature)來能明確點出特定的method。
1234publicclassFoo{
publicIntegergetData(){...}
publicStringgetData(){...}
}
*我前一篇有提到signature不包括returntype上面兩個method擁有相同的signature,導致這個class變成不合格(getData重複定義)。
**這個Fooclass就JavaPLspec來說是不合法,但不代表一個class不能有這樣的兩個method,vm內部是以name+descriptor(argumenttype/order+returntype)來區別method而非signature。
至於後半段提到的1.5以後的signature,我指的是vmspec對signature的定義,它和你在書中看到的methodsignature的涵義不同。
(接下來的部份如果不懂,暫時不用太在意)舉例來說JRE1.5coreclasses裡的http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collections.html#replaceAll(java.util.List,%20T,%20T)這個method其實等同1publicstaticbooleanreplaceAll(java.util.List,java.lang.Object,java.lang.Object)
該methodbytecode中的signature資訊是: