List 、List<?> 和List<Object>

事实上,由于泛型参数将擦除到它的第一个边界,因此List<?>看起来等价于List实际上也是List<Object>。

List实际上表示"持有任何Object类型的原生List,而List<?>表示"具有某种特定类型的非原生List,只是我们现在不知道那种类型是什么"。

public static void test(List<?> list,Object o){
       // (set capture of ?) can not be applied to Object
      // list.add(o);

     //  cannot resolve symbol T
     //T t =  list.get(0);
     Object r = list.get(0);
 }
public static <T> T exact1(List<T> list){
     T t = list.get(0);
     return t;
 }

    public static void main(String[] args) {
        List list = new ArrayList<Long>();
        List<?> list1 = new ArrayList<Long>();
        List<Long> list2 = new ArrayList<Long>();
        Object oo = exact1(list1);
        Long  oo3 = exact1(list2);
    }
```


**使用带有泛型类型参数的转型或instanceof 不会有任何效果**

```
 
        //将会产生"unchecheked cast"
        List list3  =(List<Long>) list1;
       //要使用以下的方式
        List list4 = List.class.cast(list1);
```

转载于:https://my.oschina.net/ouyangtaohong/blog/894478

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值