下面的代码编译,但如果我取消注释注释行,它不,我很困惑为什么。 HashMap的确扩展了AbstractMap,并且宣告map的第一行编译得很好。Java通用问题
import java.util.AbstractMap;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String args[]) {
Map<String, ? extends AbstractMap<String, String>> map = new HashMap<String, HashMap<String, String>>();
//map.put("one", new HashMap<String, String>());
}
}
而且,我知道了 “正确的方式” 是这样的:
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String args[]) {
Map<String, Map<String, String>> map = new HashMap<String, Map<String, String>>();
map.put("one", new HashMap<String, String>());
}
}
嗨jon。你可以解释吗 ?为什么不安全?在我看来,橙色的例子应该工作。它应该添加一个橙色的水果名单。 – Jeb 2011-05-12 06:47:35
,最重要的是如果我们想要一个通用的水果清单,解决方案是什么? – Jeb 2011-05-12 06:48:30
@ user450602:但它不是*实际上*水果清单 - 这是一个列表'。由于类型擦除,Java无法分辨,但这就是它被创建的原因。我将编辑该示例以更多地展示它为什么不起作用。 –
2011-05-12 06:48:36