W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
通配符類型由問號表示,如<?> 。
對于通用類型,通配符類型是對象類型用于原始類型。
我們可以將任何已知類型的泛型分配為通配符類型。
這里是示例代碼:
// MyBag of String type MyBag<String> stringMyBag = new MyBag<String>("Hi"); // You can assign a MyBag<String> to MyBag<?> type MyBag<?> wildCardMyBag = stringMyBag;
通配符通配類型中的問號(例如,<?>)表示未知類型。
當您使用通配符聲明參數化類型作為參數類型時,這意味著它不知道它的類型。
MyBag<?> unknownMyBag = new MyBag<String>("Hello");
我們表示通配符的上限
<? extends T>
這里,T是一種類型。<? extends T>表示任何類型為T或其子類是可接受的。
例如,上限可以是數字類型。
使用上限作為數字,我們可以將方法定義為
class MyBag<T> { private T ref; public MyBag(T ref) { this.ref = ref; } public T get() { return ref; } public void set(T a) { this.ref = a; } } public class Main { public static double sum(MyBag<? extends Number> n1, MyBag<? extends Number> n2) { Number num1 = n1.get(); Number num2 = n2.get(); double sum = num1.doubleValue() + num2.doubleValue(); return sum; } }
不管你為n1和n2傳遞什么,它們將始終與Number的賦值兼容,因為編譯器確保傳遞給sum()方法的參數遵循其聲明中指定的規(guī)則 <? extends Number>。
指定下限通配符與指定上限通配符相反。
使用下限通配符的語法是<? super T>,這意味著“任何是T的超類型”。
class MyBag<T> { private T ref; public MyBag(T ref) { this.ref = ref; } public T get() { return ref; } public void set(T a) { this.ref = a; } } public class Main { public static <T> void copy(MyBag<T> source, MyBag<? super T> dest) { T value = source.get(); dest.set(value); } }
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: