Java 泛型 通配符理解_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java 泛型 通配符理解

Java 泛型 通配符理解

 2014/10/24 15:47:14  hacksin  程序员俱乐部  我要评论(0)
  • 摘要:6.泛型,通配符(1)传参时要求类型为B,那么可以传入B或B的子类型获取返回值时,如果返回的类型是B,那么接收他的类型可以是B或者B的父类型。(2)<?extendsT>表示其定义的泛型范围为T及其子类型<?superT>表示其定义的泛型范围为T及其父类型(3)object是所有类的父类,NULL代表所有类型(4)举例:设:BextendsA,CextendsBList<?extendsB>list=newArrayList<B>()
  • 标签:
6.泛型通配符
(1)
传参时要求类型为B,那么可以传入B或B的子类型
获取返回值时,如果返回的类型是B,那么接收他的类型可以是B或者B的父类型。
(2)
<? extends T>表示其定义的泛型范围为T及其子类型
<? super T>表示其定义的泛型范围为T及其父类型
(3)
object是所有类的父类,NULL代表所有类型
(4)举例:
设:B extends A, C extends B
List<?  extends B> list = new ArrayList<B>();//表示list存放的是B或者B的子类。
//list.add(new A());//由于定义了list存放的是B或B的子类,所以不能传入其父类A
//list.add(new B());  //由于定义的范围是B或B的子类,但没有明确到底是B还是子类C还是其他新定义的子类,所以编译器无法比较传入的类与定义的类的父子关系,故报错。
//list.add(new C()): //理由同上
//list.add(new Object()); //所有类的父类必然传不进去了
list.add(null); //null代表所有类型,故编译器允许其传入。
A a = list.get(0); //子类可以赋值给父类
B b = list.get(0); //子类可以赋值给父类
//C c = list.get(0); //由于list里面可以存放B类型,所以父类是无法赋值给子类的。
Object o = list.get(0); //子类可以赋值给父类

List<? super B> list = new ArrayList<B>();//表示list存放的是B或B的父类
//list.add(new A()); //由于A是B的父类,单list只接收B或B的子类,故报错
list.add(new B()); //成功
list.add(new c());//成功
list.add(null);//成功
//list.add(new Object());//Object是所有类的父类,必然失败了
//A a = list.get(0); //由于list存放的是B或B的父类,有可能是Object,因父类是无法赋值给子类,故报错
//B b = list.get(0); //同样的道理,如果list存放Object类型就报错了
//C c = list.get(0);//依然是父类无法给子类赋值
Object o = list.get(0);//成功,Object没有父类了

代码:

public void test()
{
ArrayList<? extends B> list = new ArrayList<B>();
A a = new A();
B b = new B();
C c = new C();
Object o = new Object();
// list.add(o);
// list.add(a);
// list.add(b);
// list.add(c);
list.add(null);
o=list.get(0);
a=list.get(0);
b=list.get(0);
// c=list.get(0);
}

public void test()
{
ArrayList<? super B> list = new ArrayList<B>();
A a = new A();
B b = new B();
C c = new C();
Object o = new Object();
// list.add(o);
// list.add(a);
list.add(b);
list.add(c);
list.add(null);
o=list.get(0);
// a=list.get(0);
// b=list.get(0);
// c=list.get(0);

}
  • 相关文章
发表评论
用户名: 匿名