泛型的应用

96 阅读1分钟

1. 泛型在继承上的使用

  1. 类 SuperA 是类A的父类,则 G<SuperA> 与 G<A>的关系:G<SuperA>和 G<A> 是并列的两个类,没有任何子父类的关系。
    比如:ArrayList<0bject>、ArrayList<String>没有关系
  2. 类 SuperA 是类A的父类或接口,SuperA<G> 与 A<G>的关系,SuperA<G>与A<G> 有继承或实现的关系。即 A<G>的实例可以赋值给 SuperA<G>类型的引用(或变量)
    比如: List<String>与 ArrayList<String>

2. 通配符:?

2.1 使用说明:

举例:ArrayList<?>
G<?>可以看做是G<A>类型的父类,即可以将G<A>的对象赋值给G<?>类型的引用(或变量)

2.3 读写数据的特点

读取数据:允许。读取的值的类型为Object类型
写入数据:不允许。特例:写入null值。

  List<?> list = null;

  List<String> list1 = new ArrayList<String>();
  list1.add("abc");
  list = list1;
  //可以读数据
  Object obj = list.get(0);
  System.out.println(obj);
  //不可以写数据
//  list.add("BB");
  //可以写NULL
  list.add(NULL);
2.4 有限制条件的通配符

List<? extends A> :可以将List<A>或List<B>赋值给List<? extends A>其中B类是A类的子类。(小于等于)
List<? super A> :可以将List<A>或List<B>赋值给List<? extends A>其中B类是A类的父类。(大于等于)

List<? extends Father> list = null;

List<Object> list1 = nulll;
List<Father> list2 = nulll;
List<Son> list3 = nulll;

//list = list1;  不可以这样
list = list1;
list = list2;
list = list3;
List<? super Father> list = null;

List<Object> list1 = nulll;
List<Father> list2 = nulll;
List<Son> list3 = nulll;

//list = list3;  不可以这样
list = list1;
list = list2;
list = list3;