[轉]java泛型中?和T的區別
阿新 • • 發佈:2018-12-14
在程式碼中經常會看到這樣的函式
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