通配符(2)

class Fruit{}
class Apple extends Fruit{}
/*
 * 不能把一个涉及Apple容器的泛型付给一个涉及Fruit的 泛型
 * Apple的List将持有任何类型的Fruit,Apple的 List在类型上不等价于Fruit的List
 * 即区分容器的类型和容器持有的类型。*/
public class NonCorvariantGenerics {
  // List<Fruit> flist=new ArrayList<Apple>();//编译出错。

}

与数组不同,泛型没有内建的协变类型。这是因为数组在语言中是完全定义的,因此可以内建了编译期和运行期检查,

但是在使用泛型时,编译器运行时系统都不知道你想用类型做些什么,此时在两个类型之间建立某种类型的向上转型关系,

这正是通配符所允许的

public class GenericAndCovariance {
   public static void main(String[]args){
  List<? extends Fruit> flist=new ArrayList<Apple>();
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值