HashMap<String, ArrayList<? extends Serializable>> map = new HashMap<String, ArrayList<ArrayList>>();
这不编译。据我所知,Java Generics应该如此。 这个:
ArrayList<? extends Serializable> c = new ArrayList<ArrayList<String>>();
成功编译。
任何人都可以说为什么以上不会编译?
答案 0 :(得分:2)
为什么你认为它应该?只要HashMap<String, Apple>
和HashMap<String, Orange>
都不是通配符,Apple
永远不会从Orange
分配任何可能的不等Apple
和Orange
ArrayList<? extends Serializable>
-types。
而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<?>>
和
extra-deps