陳俊良臺灣大學:資訊工程學研究所謝宗翰Hsien, Tsung-HanTsung-HanHsien2010-05-182018-07-052010-05-182018-07-052008U0001-2307200819565800http://ntur.lib.ntu.edu.tw//handle/246246/183668Java在Java5.0版加入了泛型的機制,為了顧及新舊Java語言版本的相容性與新舊程式碼交互使用,Sun採用了型別擦拭法去實現泛型機制。然而使用擦拭法去實現泛型所產生的最大問題是執行期間與泛型的相關的型別資訊將會遺失,這問題讓函式重載無法在使用泛型型別參數的函式使用,因此我們對函式重載的問題提出了可行的解法,並且實現在Java6.0上。Java 5.0 added many new features, including parametric polymorphismgenericity). In order for compatibility, Java adopted the type erasure tochieve the generic mechanism, however run-time type information will be lost after type erasure. This causes that method overloading doesn’t work for methods with generic type parameters. In this thesis, we try to solve this problem.目錄文摘要 i文摘要 ii謝 iii. 簡介 1.1. 研究動機 1.2. 情境 1.2.1. 不同的函式名稱 2.2.2. 使用 Wildcard 3.2.3. 使用泛型的Java程式下的函式名稱多載 4.3. 目標與論文架構 5. 背景知識 7.1. Java泛型介紹 7.1.1. 一般化方法(Generalization) 8.1.2. 特殊化方法(Specialization) 9.1.3. Java採用Generalization實現泛型原因 10.2. 型別擦拭法(Type Erasure) 10.3. Javac Compile Pass 12.4. JCTree Node & Symbol 13.4.1. JCTree 14.4.2. Symbol 15. 問題與解決策略 17.1. Parameterized Type Parameters Method Overload Problem 17.2. 問題一:java語法禁用Parameterized type parameters method overloading 18.2.1. 問題一解決策略 18.3. 問題二:如何讓經過型別擦拭後的程式在JAVA虛擬機器上能夠執行? 19.3.1. 問題二解決策略 19.3.2. Rename 20. 實作 23.1. Javac 修改後的流程 23.2. JCJCMethodDecl Node端作法 25.2.1. Rename作法與重新命名規則 26.3. JCJCMethodInvocation Node端作法 29.3.1. JCJCMethodInvocation 、JCJCMethodDecl與 method symbol 29.3.2. 處理由.java呼叫函式 31.3.3. 處理已做過Rename的.class檔中的函式 32. 結論 35考文獻 39application/pdf1106618 bytesapplication/pdfen-US泛型型別化參數函式重載GenericParameterized Type Parametersmethod overloading考量參數化型別參數之JAVA函式重載機制A Java Method Overloading Mechanism For Parameterized Type Parametersthesishttp://ntur.lib.ntu.edu.tw/bitstream/246246/183668/1/ntu-97-R95922140-1.pdf