java泛型中<?>和<T>有什么区别?
一、T自定義泛型和?通配符泛型
?和T都表示不確定的類型??
public static void printColl(ArrayList<?> al){Iterator<?> it = al.iterator();while(it.hasNext()){System.out.println(it.next().toString());} }但如果是自定義泛型T的話,函數(shù)里面可以對T進(jìn)行操作 比如while里面可以這樣寫
T t = it.next();
System.out.println(t);
1.通配符泛型<?>適用場景:
在整個(gè)類中只有一處使用了泛型,使用時(shí)注意加了泛型的參數(shù)不能調(diào)用與參數(shù)類型有關(guān)的方法。
比如打印出任意參數(shù)化類型集合中的所有內(nèi)容,就適合用通配符泛型<?>
?
2. 自定義泛型<T>適應(yīng)場景:
當(dāng)一個(gè)類型變量用來表達(dá)兩個(gè)參數(shù)之間或者參數(shù)與返回值之間的關(guān)系時(shí),即統(tǒng)一各類型變量在方法簽名的兩處(參數(shù)或返回值)被使用,或者類型變量在方法體代碼中也被使用而不僅僅在簽名的時(shí)候使用,這是應(yīng)該用自定義泛型<T>。
泛型方可以調(diào)用一些有關(guān)類型的方法。比如集合的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的父類型。
總結(jié)
以上是生活随笔為你收集整理的java泛型中<?>和<T>有什么区别?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中的Runtime类详解
- 下一篇: Spring AOP(一):概览