Java 泛型是一種在代碼編寫時提供更強類型檢查和更好的代碼重用功能的特性。它被設計用來允許編程人員編寫能夠在不失靈活性的同時能夠避免類型錯誤的代碼。泛型允許類、接口、方法在定義時使用一個或多個類型形參(type parameter),以后使用時再傳入具體的類型實參(type argument)。這種參數化類型的方式可以有效的將類型的檢查和轉換由運行時轉移至編譯時。
public class Box<T> { private T t; public void set(T t) { this.t = t; } public T get() { return t; } public static void main(String[] args) { Box<String> box = new Box<>(); box.set("hello"); System.out.println(box.get()); } }
泛型中的問號(?)被稱為通配符(Wildcard),它用來指代任意類型。問號通配符可以用在參數中,也可以用在返回值類型中。在泛型的類型中,通配符 ? 用作類型參數,表示可以接受任何類型參數的參數化類型。通配符的主要作用就是靈活而簡潔地表達各種要求。
public static double sum(ArrayList<? extends Number> list) { double sum = 0; for (Number n : list) { sum += n.doubleValue(); } return sum; } public static void main(String[] args) { ArrayList<Integer> intList = new ArrayList<>(); intList.add(1); intList.add(2); intList.add(3); System.out.println(sum(intList)); }
當使用通配符 ? 時有幾種限制:
- 不能用在聲明中,例如不能聲明 extends Number n>
- 不能用于方法調用中返回類型的限制,例如 List<? extends Number> list = new ArrayList<>();
- 不能添加或修改泛型集合中通配符 ? 聲明的元素。
上一篇css中獲取兄弟元素