Java泛型方法


泛型方法

泛型方法可以定義在泛型類中,也可以定義在普通類中。定義泛型方法時,將泛型變量用尖括號包裹,並且將泛型變量置於方法修飾符和方法返回值之間。

public class ArrayAlg{
    public static <T> T getMiddle(T... a){
        return a[a.length / 2];
    }
}

當調用一個泛型方法時,在方法名前的尖括號中放入具體的類型,實例化類型參數:

String middle = ArrayAlg.<String>getMiddle("Hello","World","!");

在大多數情況下,調用泛型方法可以省略對類型參數,編譯器有足夠的信息能夠推斷出如何實例化類型參數,下面的代碼與上面的代碼具有相同的效果:

String middle = ArrayAlg.getMiddle("Hello","World","!");

編譯器根據傳入方法的參數(“Hello”、“World”、”!“)推斷出應該使用String實例化類型參數T。

在少部分特殊的情況下,編譯器無法推斷出如何實例化類型參數,比如下面的代碼:

double middle = ArrayAlg.getMiddle(1.01,2.02,3);

解釋這句代碼有兩種方法,且兩種方法都是合法的。簡單的說,編譯器會自動將1.01和2.02打包成Double對象,將3打包成Integer對象,因為不能確定到底是使用Double還是Integer實例化類型參數T,編譯器將嘗試尋找Double和Integer的共同父類。事實上,將會找到兩個共同父類——Number和Comparable接口,其本生也是一個泛型類型。最終,編譯器無法判斷到底使用什么類型實例化類型參數,因此報錯。在這種情況下,可采取的補救措施時將所有參數寫成double值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM