1. 程式人生 > >java5-泛型萬用字元

java5-泛型萬用字元

如果有兩個類:

Shape類

public class Shape{
     //價錢
     private String area;
}

Square類
public class Square extends Shape{
     //價錢
     private String area;
}

 
 

我們要寫一個計算總價的方法,要求可以傳shape集合或Square集合。

那麼,java5之前,只能通過陣列的方式傳入引數並計算

例:

public static double totalArea(Shape[] arr){
    //總價   
    double total =0;

    for(Shape s:arr){
       if(s!=null)
          total+=s.area();
    }
     return total;
}
在java5之後,引入了泛型,那麼我們可以通過Collection來實現此演算法嗎?

如:

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。

到此,萬用字元的作用已經結束,快去嘗試把!!!