九、泛型

九、泛型
    
    泛型两大特性:擦除(出现限制)和不协变(出现通配符)

    1)限制条件:
        1.不能使用基本类型
             原因:因为Object类型不能储存如double的值。
        2.不能抛出也能不捕获泛型类型实例
             原因:Java编译器已限制。
        3.参数化类型的数组  如:A<String> a = new A<String>() ;
             原因:擦除的时候会将A<String>转化为Object,故把参数丢失了。
        4.运行时类型查询只适用于原是类型
             原因:因为运行时Java虚拟机中的对象总是一个特定的非泛型类型。如a instanceof A<String>仅仅判断a是否属于A,而不是A<String>。

    2)使用方式:
            ①<?>
            ②<T>
            ③<? extends A>  限制了?的上限,即?必须是A或A的子类
            ④<T extends A>  限制了T的上限,即T必须是A或A的子类   
            ⑤<? super A>      限制了?的下限,即?必须是A或A的父类
            ⑥<T super A>      限制了T的下限,即T必须是A或A的父类

        问题一:为什么出现通配符(?)?
     原理:泛型是不协变的(数组是协变的):因为类型参数(T)使用必须是一个类型,当出现List<Integer>与List<Number>相互赋值的时候,使用类型参数(T)将会报错,尽管Integer是Number的子类。因为类型参数已经设                置准确的类型是List<Integer>。当使用通配符的时候,将会解除这个限制 如Collection中的addAll()。
               addAll():interface Collection<E>{
                                    public boolean addAll(Collection<? extends E> c) ;
                                }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值