对于泛型的自动匹配的一个问题,可能你也会碰到的

以下是源代码:
package com.zz.jdk5;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class CommonGeneric<T> {
 private T t;
 public T getT() {
  return t;
 }
 public void setT(T t) {
  this.t = t;
 }
 public static void main(String[] args) {
  CommonGeneric<? extends List> commonGeneric =new CommonGeneric<List>();
  commonGeneric = new CommonGeneric<ArrayList>();
  ArrayList al = new ArrayList();
  //下面就是错误产生行
  //commonGeneric.setT(al);
  
  commonGeneric = new CommonGeneric<LinkedList>();
  LinkedList ll = new LinkedList();  
 }
}

问题解释:
使用<?>或是<? extends SomeClass>的声明方式,意味著您只能通过该名称來*取得*所参考实例的信息,或者是*移除*某些信息,但不能*增加*它的信息,因为只知道当中放置的是SomeClass的子类,但不确定是什么类的实例,编译器不让您加入信息,理由是,如果可以加入信息的話,那么您就得記得取回的实例是什么类型,然后转换为原來的类型方可进行操作,这就失去了使用泛型的意义。 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值