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。

到此,通配符的作用已经结束,快去尝试把!!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值