JAVA泛型之:(通配符上限)和(通配符下限)

  一.通配符上限和通配符下限接受的类型

  通配符上限:

  通配符下限:

  以下代码是测试结果,注释为解释说明

 1 package xayd.hjj;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 class A{}
 7 class B extends A implements F{}
 8 class C extends A{}
 9 class D extends A{}
10 class E{}
11 interface F{}
12 
13 public class Test{
14     
15     public static void main(String[] args) {        
16         
17         //下面五行代码说明:List接受A或者继承A的类
18         Listextends A> listA = new ArrayList();
19         Listextends A> listB = new ArrayList();
20         Listextends A> listC = new ArrayList();
21         Listextends A> listD = new ArrayList();
22         // List listE = new ArrayList();  //编译不能通过,类E与类A无关
23         
24         
25         //下面三行代码说明:List接受B或者的父类
26         Listsuper B> listA1 = new ArrayList();
       List listA2 = new ArrayList();
27 Listsuper B> listF = new ArrayList(); 28 //List listC1 = new ArrayList(); //编译不能通过,类C不是类B的父类 29 30 } 31 }

 

   二.通配符下限和通配符上限存取问题

   通配符上限:

   List list = new ArrayList();

   这样定义一个list的时候,是不允许向这个list添加任何东西的。list可以接受其B类型和B的子类。像list中添加对象的时候因为编译器不能确定这个子类的确切类型,因此不允许向里添加任何对象。唯一可以添加的是null。也可以这样理解:Fruit是Apple的父类,也是orange的父类。但是你不能说Fruit就是Apple或者orange。

   代码测试如下:

 1 package xayd.hjj;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 class A{}
 6 class B extends A implements F{}
 7 class C extends A{}
 8 class D extends A{}
 9 class E{}
10 interface F{}
11 public class Test{
12     public void a(Listextends A> list){
13         list.add(null);        //编译通过,但无实际意义
14         // list.add(new B());  //编译不能通过
15         // list.add(new A());  //编译不能通过
16         
17     }
18 
19     public static void main(String[] args) {        
20         Test test = new Test();
21         Listextends A> listB = new ArrayList();
22         test.a(listB);
23         
24     }
25 }

 

  

  通配符下限:

  List list = new ArrayList();

  这样定义一个list的时候,允许向这个list添加对象。list可以接受其B类型和B的父类。像list中添加对象的时候编译器能确定确切类型。也可以这样理解:Fruit是Apple的父类,也是orange的父类。我们可以说Apple就是一个Fruit。

   代码测试如下:

 

你可能感兴趣的:(JAVA泛型之:(通配符上限)和(通配符下限))