为什么使用泛型的HashMap声明错误? [重复]

问题描述 投票:0回答:1
HashMap<String, ArrayList<? extends Serializable>> map = new HashMap<String, ArrayList<ArrayList>>();

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

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

成功编译。

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

java generics serialization arraylist hashmap
1个回答
2
投票

为什么你认为它应该?只要HashMap<String, Apple>HashMap<String, Orange>都不是通配符类型,Apple永远不会从Orange指定任何可能的不等AppleOrange

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<?>>
© www.soinside.com 2019 - 2024. All rights reserved.