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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么使用泛型的HashMap声明错误? [重复]相关的知识,希望对你有一定的参考价值。

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

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

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

成功编译。

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

答案

为什么你认为它应该?只要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<?>>

以上是关于为什么使用泛型的HashMap声明错误? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

《Java架构筑基》从Java基础讲起——泛型的限制

Java基础之泛型的使用

Java基础:泛型

动态声明泛型类型实例[重复]

Java泛型的使用

Java泛型学习笔记 - 泛型的介绍