为什么使用泛型的HashMap声明错误?

时间:2018-03-02 01:47:38

标签: java generics serialization arraylist hashmap

HashMap<String, ArrayList<? extends Serializable>> map = new HashMap<String, ArrayList<ArrayList>>();

这不编译。据我所知,Java Generics应该如此。 这个:

ArrayList<? extends Serializable> c = new ArrayList<ArrayList<String>>();

成功编译。

任何人都可以说为什么以上不会编译?

1 个答案:

答案 0 :(得分:2)

为什么你认为它应该?只要HashMap<String, Apple>HashMap<String, Orange>都不是通配符,Apple永远不会从Orange分配任何可能的不等AppleOrange 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