1. 程式人生 > >[轉]java泛型中?和T的區別

[轉]java泛型中?和T的區別

在程式碼中經常會看到這樣的函式

public static void printColl(ArrayList<?> al){
       Iterator<?> it = al.iterator();
       while(it.hasNext())
       {
           System.out.println(it.next().toString());
       }
}
  • <T>在java中都代表著泛型 屬於型別形參的一種
  • <?>為型別萬用字元,型別萬用字元一般是使用?代替具體的型別實參,注意了,此處?
    是型別實參,而不是型別形參 。

下列為使用中的不同:

public class FanXing {
 
    TestA a = new TestA("13");
    TestA b = new TestA(123);
 
    public void getClass1(TestA<?> test) {
 
    }
    //報錯
    public void getClass2(TestA<T> test) {
 
    }
}
 
class TestA<T> {
    private T t;
 
    public TestA
(T key) { this.t = key; } }

在使用泛型作為方法的引數時 就需要使用泛型萬用字元來解除傳入引數的型別,型別引數就做不到

<?><T>的還有一個區別就在於字母形參可以在之後的函式呼叫函式。

public static void printColl(ArrayList<T> al){
        Iterator<T> it = al.iterator();
        while(it.hasNext())
        {
            T t = it.next
(); System.out.println(t.toString()); } }

參考文章:
https://blog.csdn.net/sinat_29774479/article/details/75072964