java泛型上、下限

写了点代码,试了一下java泛型,上限和下限的问题。经验不足,讲的不好的地方轻拍。

1.Toy类

package fanxing;
 
public class Toy {
 
}

2.SubToy类

package fanxing;
 
public class SubToy extends Toy{
     
}

3.SubToy2类

package fanxing;
 
public class SubToy2 extends Toy{
     
}

4.main类

01package fanxing;
02 
03import java.util.ArrayList;
04import java.util.List;
05 
06public class main {
07 
08    /**
09     * @param args
10     * @throws IllegalAccessException
11     * @throws InstantiationException
12     */
13    public static void main(String[] args) throws Exception{
14        Toy toy = new Toy();
15        SubToy subToy = new SubToy();
16        SubToy subToy2 = new SubToy();
17         
18        List<? extends Toy> list = new ArrayList<Toy>();//表示所持有对象是Toy子类
19        List<? extends Toy> list1 = new ArrayList<SubToy>();//表示所持有对象是Toy的子类
20         
21//      list.add(toy);      错误的 因为list所持有的对象类型上限为Toy,但是他不知道具体持有的对象类型,
22//      list.add(subToy);   错误的,理由同上
23//      list.add(subToy2);  错误的,理由同上
24         
25//      list1.add(toy);         错误的 因为list1所持有的对象类型上限为Toy,但是他不知道具体持有的对象类型,
26//      list1.add(subToy);   错误的,理由同上
27//      list1.add(subToy2);  错误的,理由同上
28         
29         
30         
31        List<? super Toy> list2 = new ArrayList<Toy>();//所持有对象为Toy的超类,下限为Toy,所以可以add() Toy及Toy的子类
32        list2.add(toy);
33        list2.add(subToy);
34        list2.add(subToy2);
35         
36//      List<? super Toy> list3 = new ArrayList<SubToy>();  错误的,所持有对象为Toy的超类,下限为Toy,
37//      所以不可以超过下限Toy,将ArrayList泛型指定为SubToy
38 
39         
40        List<? super SubToy> list4 = new ArrayList<Toy>();//所持有对象为SubToy的超类,下限为SubToy ,
41                                                                //可以将ArrayList泛型指定为Toy
42//      list4.add(toy); 错误的,因为虽然持有对象为SubToy的超类,但是容器不知道具体的类型是超类还是子类,所以不能放入超类,但是子类的话就可以的
43        list4.add(subToy);
44        list4.add(subToy2);
45         
46        List<? super SubToy> list5 = new ArrayList<SubToy>();//所持有对象为SubToy的超类,下限为SubToy ,
47        //可以将ArrayList泛型指定为SubToy      
48//      list5.add(toy); 错误的,理由同list4
49        list5.add(subToy);
50        list5.add(subToy2);
51         
52//      List<? super SubToy> list6 = new ArrayList<SubToy2>(); 错误的,所持有对象为SubToy的超类,下限为SubToy ,
53//      所以持有的对象可能为Toy,也可能为SubToy ,也就不能将具体的实现的泛型指定为SubToy2
54         
55         
56    }
57 
58}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值