我正在学习java中的泛型。 我创建了一个Map并使用'new HashMap>()'进行了初始化。 之后,我创建了一个ArrayList来放入该变量。 但是,此代码无法编译。
错误信息是:
“类型Map>中的方法put(String,capture#1-of?extends List)不适用于参数(String,List)”
在Map.put()方法上。
我的代码如下。
package org.owls.generic.main;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main {
public static void main(String[] args) {
ArrayList<String> tmpArr = new ArrayList<String>();
tmpArr.add("A");
tmpArr.add("B");
List<?> value = new ArrayList<String>(tmpArr);
Map<String, ? extends List<String>> testMap = new HashMap<String, List<String>>();
testMap.put("K", value);
}
};
我无法理解为什么编译器看起来是类型,即使我分配了继承的类'List'。
抱歉我的英语不好,欢迎编辑。 谢谢你的回答:D
答案 0 :(得分:3)
您不能将null
以外的任何内容放入带有? extends ...
参数的泛型类型中。这是基本的泛型 - 因为类型参数是未知的,你不能把任何东西放进去,因为你试图放置的东西不能保证是那种未知类型的子类型。
回想一下PECS(制作人extends
,消费者super
)规则。 ? extends
只能用于生产者。放入内容是消费者。