Java 限定傳入的兩個泛型參數的類型相同


Java 限定傳入的兩個泛型參數的類型相同

定義一個泛型方法,同時限制傳入的兩個泛型參數的類型要相同,整理了一下思路。

1、定義泛型方法

Java 定義泛型方法的格式大致如下:

/**
* 泛型方法
* @param a 泛型參數a
* @param b 泛型參數b
* @param <T> 聲明此方法持有一個類型T,也可以理解為聲明此方法為泛型方法
* @return 此方法的返回值為類型T
*/
public static <T> T test(T a, T b) {
    return a;
}

現在要限定泛型參數 a 與 泛型參數 b 傳入的類型相同,怎么辦呢?

2、超類型限定

既然要限定泛型參數 a 與 b 的類型相同,那么可不可以讓 b 作為 a 的子類去實現類型限定呢?

思路如下

1、聲明 參數 a 的類型,直接讓 a 繼承泛型 T就可以了。

//聲明參數a的類型為S,S繼承於T
public static <T, S extends T> T test(S a, T b) {
    return a;
}

2、聲明參數 b 的類型, 繼承 Comparable<a>的類型。 Comparable 是一個泛型接口,實現類必須都重寫 compareTo() 方法,因此可以用來限定 b 的類型只能是 a 的 類型,即超類型限定(如果參數只是包裝類,到這里就可以了)

public static void main(String[] args) {
    //包裝類、當兩個參數的類型不同,直接報錯
    test(1, 2);
}

public static <T, S extends T, W extends Comparable<S>> T test(S a, W b) {
    return a;
}

3、傳入的是實體類型參數,必須重寫 compareTo() 方法 ,因為上文的包裝類都默認實現了 compareTo() 方法

如 User 實體類:

image-20210528165526691

public static void main(String[] args) {
    //實體類型,必須重寫compareTo()方法
    User user1 = new User();
    User user2 = new User();
    test(user1, user2);
}

public static <T, S extends T, W extends Comparable<S>> T test(S a, W b) {
    return a;
}

到這里,就限定了傳入的兩個泛型參數的類型必須一致,否則報錯。


免責聲明!

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



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