Java 为什么我会在课堂上捕捉到适用性错误?

Java 为什么我会在课堂上捕捉到适用性错误?,java,list,generics,Java,List,Generics,我编写了以下代码: public class HashMapImpl<Key,Value>{ Key key; Value value; List<? extends Key> keylist; List<? extends Value> valuelist; public HashMapImpl(Key k,Value v){ this.key = k; this.value = v

我编写了以下代码:

public class HashMapImpl<Key,Value>{
    Key key;
    Value value;

    List<? extends Key> keylist;
    List<? extends Value> valuelist;

    public HashMapImpl(Key k,Value v){
        this.key = k;
        this.value = v;

        keylist = new ArrayList<Key>();
        valuelist = new ArrayList<Value>();
    }

    public Value put(Key k, Value v){
        this.keylist.add(k);
    }
}
公共类HashMapImpl{
钥匙;
价值观;

List在本用例中没有理由使用
?扩展键
;该语法适用于可能更具限制性的列表类型,但不一定比
更具限制性。因为编译器不知道它只是一个
列表
,所以它不允许您添加
这里列表*的泛型类型确实比
更具限制性

考虑这一点的一种方法是,在
Collection
s的情况下:


  • 列表中添加
    内容很容易另一个错误是方法
    put()
    List<Key> keylist;
    List<Value> valuelist;