泛型上下限

1.Toy类
public class Toy {
}

2.SubToy类
public class SubToy  extends  Toy{
}

3.SubToy2类
public class SubToy2 e xtends Toy{

}

4.main类

import java.util.ArrayList;
import java.util.List;

public class main {

public static void main(String[] args) throws Exception{
Toy toy = new To y();
SubToy subToy = new SubToy();
SubToy subToy2 = new Sub To y();

List<? extends Toy> list = new ArrayList<Toy>();//表示所持有对象是Toy子类
List<? extends Toy> list1 = new ArrayList<SubToy>();//表示所持有对象是Toy的子类

// list.add(toy); 错误 的 因为list所持有的对象类 上限为To y,但是他不知道具体持有的对象类型,
// list.add(subToy); 错误的,理由同上
// list.add(subToy2); 错误的,理由同上

// list1.add(toy); 错误的 因为list1所持有的对象类型上限为To y,但是他不知道具体持有的对象类型,
// list1.add(subToy); 错误的,理由同上
// list1.add(subToy2); 错误的,理由同上

List<? super Toy> list2 = new ArrayList<Toy>();//所持有对象为Toy的超类,下限为Toy,所以可以add() Toy及Toy的子类
list2.add(toy);
list2.add(subToy);
list2.add(subToy2);

// List<? su pe r Toy>  list3 = new ArrayList<SubToy>(); 错误的,所持有对象为Toy的 超类,下限为Toy,
// 所以不可以超过下限Toy,将ArrayList泛型 指定为SubToy

List<? super SubToy> list4 = new ArrayList<Toy>();//所 持有对象为SubToy的超类,下限为SubToy ,
//可以将ArrayList泛型指定 为Toy
// list4.add(toy); 错 误的,因为虽然持有对象为SubToy的超类,但是容器不知道具体的类型是超类还是子类,所以不能放入超 类, 但是子类的话就可以
list4.add(subToy);
list4.add(sub Toy2);//错误

List<? super SubToy> list5 = new ArrayList<SubToy>();//所持有对象为SubTo y的超类,下限为SubToy ,
//可以将ArrayList 泛型指定为SubToy 
// list5.add(toy);  错误的,理由同list4
list5.add(subToy );
list5.add(subToy 2);//错误

// List<? super SubToy> list6 = ne w ArrayList<SubToy2>(); 错误的,所持有对象为SubToy的超类,下限为SubToy ,
// 所以持有的对象可能为Toy,也可能为SubToy ,也就不能将具体的实现的泛型指定为SubToy2
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值