Java是一種靜態(tài)類型語言,它提供了泛型類形參和通配符來增加類型的安全性和靈活性。
泛型類形參是指在定義類時,使用類型參數來表示類中的屬性、方法或內部類,使得類中的數據類型變得更加抽象和通用。例如,定義一個類Box,用T來表示盒子中裝的物品的類型:
public class Box<T> { private T item; public void addItem(T item) { this.item = item; } public T getItem() { return item; } }
在這個Box類中,T是一個泛型類形參,可以代表任何類型,使用時需要實例化該類,并傳遞一個具體的類型作為參數:
Box<String> stringBox = new Box<>(); stringBox.addItem("hello"); String str = stringBox.getItem();
上面的例子中,我們實例化了一個Box對象,并指定類型為String,然后向這個盒子中添加了一個字符串,最后獲取這個字符串并賦值給變量str。
通配符是指“?”符號,可以用于定義泛型類的參數或方法的參數,表示這個參數可以是任何類型。通配符可以分為上限通配符和下限通配符。
上限通配符用于表示參數類型必須是指定類型或指定類型的子類。例如:
public static double sumOfList(List<? extends Number> list) { double sum = 0; for (Number num : list) { sum += num.doubleValue(); } return sum; }
上面的例子中,定義了一個sumOfList方法,它接受一個List作為參數,這個List必須是Number類型或Number類型的子類。例如,我們可以將一個List<Integer>或List<Double>作為參數傳遞給這個方法,但不能將一個List<String>作為參數傳遞。
下限通配符用于表示參數類型必須是指定類型或指定類型的父類。例如:
public static void addToList(List<? super Integer> list) { list.add(new Integer(10)); list.add(new Integer(20)); }
上面的例子中,定義了一個addToList方法,它接受一個List作為參數,這個List必須是Integer類型或Integer類型的父類。例如,我們可以將一個List<Number>或List<Object>作為參數傳遞給這個方法,但不能將一個List<Double>作為參數傳遞。
使用泛型類形參和通配符可以使Java程序編寫更加簡潔和靈活,同時避免類型轉換和類型不匹配帶來的錯誤。