HashMap<String, ArrayList<? extends Serializable>> map = new HashMap<String, ArrayList<ArrayList>>();
这不能编译。据我对 Java 泛型的了解,应该如此。 还有这个:
ArrayList<? extends Serializable> c = new ArrayList<ArrayList<String>>();
编译成功。
谁能告诉我为什么上面的代码不能编译吗?
最佳答案
你为什么认为应该这样做?一个HashMap<String, Apple>
永远不能从 HashMap<String, Orange>
分配对于任何可能的不平等Apple
和Orange
,只要 Apple
和Orange
不是通配符类型。
和ArrayList<? extends Serializable>
与 ArrayList<ArrayList<?>>
不一样.
你的意思可能是:
HashMap<String, ? extends ArrayList<? extends Serializable>> map =
new HashMap<String, ArrayList<ArrayList<?>>>();
现在它可以编译了,因为确实:
? extends Serializable // can be assigned from
ArrayList<?>
和
? extends ArrayList<? extends Serializable> // can be assigned from
ArrayList< ArrayList<?>>
关于java - 为什么这个使用泛型的 HashMap 声明是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49061565/