在Java中,? 代表通配符
不確定泛型的具體類型時,可以用 ? 代替
邊界
< ? extends Student > 表示上界限限定,泛型參數只能是Student類及其子類
< ? super Student > 表示下界限限定,泛型參數只能是Student類及其父類
以上把 ? 改成 T 仍然是上下界限限定
區別
T 用於泛型類以及泛型方法的定義,如
//泛型類
class Demo<T extends ClassDemo>{
...
}
//泛型方法
public <T extends ClassDemo> void get(T x) {
...
}
?是用於類的聲明或者是參數,如
public class GenericsTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<? extends Number> str ;//在聲明類時使用,不清楚泛型的類型,可用?表示,再用具體的類型實例化
str = new ArrayList<Integer>();
//str = new ArrayList<Double>();
GenericsTest a = new GenericsTest();
List<Double> list = new ArrayList<Double>();
a.set(list);//在調用參數時直接使用具體的實參
}
public void set(List<? extends Number> list) {//在定義時泛型參數不確定使用?表示
}
}
版權聲明:本文參考CSDN博主「軒轅秋風淚」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_45925974/article/details/104806007