java5-泛型萬用字元
阿新 • • 發佈:2018-11-21
如果有兩個類:
Shape類
public class Shape{
//價錢
private String area;
}
Square類
public class Square extends Shape{
//價錢
private String area;
}
我們要寫一個計算總價的方法,要求可以傳shape集合或Square集合。
那麼,java5之前,只能通過陣列的方式傳入引數並計算
例:
在java5之後,引入了泛型,那麼我們可以通過Collection來實現此演算法嗎?public static double totalArea(Shape[] arr){ //總價 double total =0; for(Shape s:arr){ if(s!=null) total+=s.area(); } return total; }
如:
public static double totalArea(Collection<Shape> arr){
double total = 0;
for(Shape s:arr){
if(s!=null)
total+=s.getArea();
}
return total;
}
大家可以試試!!!
----------攔截線----------------
結果是,不可以!!!會丟擲一個ArrayStoreException異常。
因為泛型集合不是協變的。
所以,java5後引入了萬用字元 ?,萬用字元用來表示引數型別的子類或超類
public static double totalArea(Collection<? extends Shape> arr){
double total = 0;
for(Shape s:arr){
if(s!=null)
total+=s.getArea();
}
return total;
}
當然,也可以不加限制條件(extends Shapre),預設extends Object。
到此,萬用字元的作用已經結束,快去嘗試把!!!