請問什麼是method signature 方法簽名?? - JWorld@TW Java論壇

文章推薦指數: 80 %
投票人數:10人

請問所謂的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資訊是:(Ljava/util/List;TT;TT;)Z 給我辣味豆腐其餘免談 » JWorld@TW »  Java新手區  已讀文章 新的文章 被刪除的文章 JWorld@TW 本站商標資訊 PoweredbyPowerfulJuteForum®VersionJute1.5.8



請為這篇文章評分?