Java 泛型

用 List 举例

List,List<?>,List

List

  • 原生类型、原始类型

List<?>

  • 通配符类型

List

  • 参数化类型,实参是 Object
		List list = new ArrayList();
        List<?> arrayList = new ArrayList();
        List<Object> objList = new ArrayList();
        List<String> strList = new ArrayList();
        List<Integer> intList = new ArrayList();
		//================== List ================
        //List 接收
        list = arrayList;
        list = objList;
        list = strList;
        list = intList;
        //List add
        list.add(new Object());
        list.add("11");
        list.add(22);
		//================== List<?> ================
		//List<?> 接收
        arrayList = list;
        arrayList = objList;
        arrayList = strList;
        arrayList = intList;
        //List<?> add
        arrayList.add(new Object());//编译报错
        arrayList.add("11");//编译报错
        arrayList.add(22);//编译报错
		//================== List<Object> ================
		//List<Object> 接收
        objList = list;
        objList = arrayList;//编译报错
        objList = strList;//编译报错
        objList = intList;//编译报错
        //List<Object> add
        objList.add(new Object());
        objList.add("11");
        objList.add(22);
  • List<?> 无法 add

  • List 只能接收 List

  • String 是 Object 的子类,但 List 并不是参数化类型 List 的子类

  • 但 List 是原生类型 List 的子类

泛型通配符

?

有界通配符

Collections#copy

//PECS 原则
//src   producer extends
//dest  consumer super
public static <T> void copy(List<? super T> dest, List<? extends T> src){

}

<? extends T>

<? super T>

泛型擦除

public  void method(List list) {

}
public  void method(List<Object> list) {

}
public  void method(List<?> list) {

}
public  void method(List<String> list) {

}
  • 其中任意 2 个同时写即编译报错
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

louisgeek

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值