使用萬用字元增強泛型
泛型中使用“?”作為萬用字元。萬用字元的使用與普通型別引數類似,如萬用字元也可以利用extends關鍵字來設定取值上限。
<? extends Number>表示Byte、Double、Float、Integer等都適合這個型別引數。此外,萬用字元還可以設定取值下限,語法如下:
<? super Number>表示型別引數是Number類的父類,如Object。
設計過程:
編寫WildcardsTest類,該類包含兩個方法:getMiddle()方法獲得給定列表的中間值,該方法的引數中要求列表引數的型別是任何Number型別的子集;
main()方法用來進行測試。程式碼如下:
public class WildcardsTest {
public static Object getMiddle(List<? extends Number> list) {
return list.get(list.size() / 2);
}
public static void main(String[] args) {
List<Integer> ints = new ArrayList<Integer>();
ints.add(1);
ints.add(2);
ints.add(3);
System.out.print("整型列表的元素:");
System.out.println(Arrays.toString(ints.toArray()));
System.out.println("整型列表的中間數:" + getMiddle(ints));
List<Double> doubles = new ArrayList<Double>();
doubles.add(1.1);
doubles.add(2.2);
doubles.add(3.3);
System.out.print("浮點列表的元素:");
System.out.println(Arrays.toString(doubles.toArray()));
System.out.println("浮點列表的中間數:" + getMiddle(doubles));
}
}
總結:
Java中的陣列支援協變型別,即如果方法引數是陣列T,而S是T的子類,則方法也可以使用引數S。
對於泛型類則沒有這個特性。為了彌補這個不足,Java推出了萬用字元型別引數。在本例項中,只需要宣告引數型別為List<? extends Number>的一個方法,就可以使用List<Integer>、List<Double>、List<Long>等型別引數。
效果如下:
相關文章
- 泛型類、泛型方法、型別萬用字元的使用泛型型別字元
- java泛型之萬用字元的使用。Java泛型字元
- 泛型--泛型萬用字元和泛型的上下限泛型字元
- 泛型概述-萬用字元泛型字元
- Java™ 教程(泛型萬用字元使用指南)Java泛型字元
- Java 泛型中的萬用字元Java泛型字元
- java中泛型之型別萬用字元(?)Java泛型型別字元
- 泛型無界萬用字元<?>的思考泛型字元
- Java泛型(類、介面、方法)及萬用字元Java泛型字元
- 集合框架-泛型高階之萬用字元框架泛型字元
- 泛型類、泛型方法及泛型應用泛型
- 使用資料增強技術提升模型泛化能力模型
- 學員優秀博文賞析:泛型萬用字元及約束泛型字元
- 計算機程式的思維邏輯 (36) - 泛型 (中) - 解析萬用字元計算機泛型字元
- JAVA泛型使用練習2(自定義泛型使用)Java泛型
- 泛型及其應用泛型
- python使用泛型Python泛型
- 泛型使用場景泛型
- 泛型物件的使用泛型物件
- Go 官方出品泛型教程:如何開始使用泛型Go泛型
- 不用typsescript也能使用型別增強功能型別
- 泛型的初運用泛型
- Java泛型知識點:泛型類、泛型介面和泛型方法Java泛型
- Java泛型理解與使用Java泛型
- Go泛型基礎使用Go泛型
- Swift 中的泛型使用Swift泛型
- c#泛型的使用C#泛型
- Ubuntu萬用字元的使用Ubuntu字元
- SQL Like萬用字元使用SQL字元
- 泛型類和泛型方法泛型
- 【java】【泛型】泛型geneticJava泛型
- java泛型之泛型方法。Java泛型
- TypeScript 基本型別和泛型的使用TypeScript型別泛型
- Java泛型應用淺析Java泛型
- 單域名、泛域名、萬用字元證書分別是什麼字元
- kotlin之泛型的使用Kotlin泛型
- java靜態方法使用泛型Java泛型
- TypeScript 泛型介面和泛型類TypeScript泛型