java泛型中<?>和<T>有什么区别?
一、T自定義泛型和?通配符泛型
?和T都表示不確定的類型??
public static void printColl(ArrayList<?> al){Iterator<?> it = al.iterator();while(it.hasNext()){System.out.println(it.next().toString());} }但如果是自定義泛型T的話,函數里面可以對T進行操作 比如while里面可以這樣寫
T t = it.next();
System.out.println(t);
1.通配符泛型<?>適用場景:
在整個類中只有一處使用了泛型,使用時注意加了泛型的參數不能調用與參數類型有關的方法。
比如打印出任意參數化類型集合中的所有內容,就適合用通配符泛型<?>
?
2. 自定義泛型<T>適應場景:
當一個類型變量用來表達兩個參數之間或者參數與返回值之間的關系時,即統一各類型變量在方法簽名的兩處(參數或返回值)被使用,或者類型變量在方法體代碼中也被使用而不僅僅在簽名的時候使用,這是應該用自定義泛型<T>。
泛型方可以調用一些有關類型的方法。比如集合的add方法。
?
?
泛型三種:
? ?? ?? ? [1]ArrayList<T> al=new ArrayList<T>();指定集合元素只能是T類型
? ?? ?? ? [2]ArrayList<?> al=new ArrayList<?>();集合元素可以是任意類型,這種沒有意義,一般是方法中,只是為了說明用法
? ?? ?? ? [3]ArrayList<? extends E> al=new ArrayList<? extends E>();
? ?? ?? ??泛型的限定:
? ? ? ?? ?? ???? extends E:接收E類型或者E的子類型。
? ? ? ?? ?? ????super E:接收E類型或者E的父類型。
總結
以上是生活随笔為你收集整理的java泛型中<?>和<T>有什么区别?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中的Runtime类详解
- 下一篇: (六)docker-compose使用教