为什么使用泛型的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
指定任何可能的不等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<?>>
以上是关于为什么使用泛型的HashMap声明错误? [重复]的主要内容,如果未能解决你的问题,请参考以下文章