Java

关于,的学习记录

2018-11-19  本文已影响0人  Hoker_
查看Rx源码时,看到了<? extends T>的使用,看的一头雾水,在网上查询一段时间后,这里对<? extends T>和<? super T>做一下理解笔记。

<? extends T>:是指 “上界通配符(Upper Bounds Wildcards)”
<? super  T>:是指 “下界通配符(Lower Bounds Wildcards)”

无论是上届还是下界,其描述主体都是T:

接下来对这些进行说明,先定义几个类:

    public class Animal{}
    public class Human extends Animal{}
    public class Coder extends Human{}
    public class Fish extends Animal{}
    public class Shark extends Fish{}
    public class Carp extends Fish{}

    public class Boat<T>{
        private T item;
        public Boat(T t){item=t;}
        public void set(T t){item=t;}
        public T get(){return item;}
    }

其继承结构如下:


继承结构

Boat则是一个容器类,用来放这些动物们。
首先,鲨鱼Shark显然也是鱼Fish,那么装鲨鱼的船(Boat<Shark>),和装鱼的船(Boat<Fish>),两者之间应该也能有一种关系:


两种船

简单点说,对于编译器而言:

Sun公司为了解决这个问题,就提出了<? extends T>和<? super T>

现在说下<? extends T>,<? super T>的副作用

总结:<? extends T>,<? super T>上界、下界,还是一个有点绕的概念,有时候也有点反直觉,加上实际项目中接触的少,所以不是很清楚,还是要理解记忆才行。
上一篇下一篇

猜你喜欢

热点阅读