【发布时间】:2014-10-01 16:46:03
【问题描述】:
让我们研究一些使用通配符的通用实例化情况:
1
这段代码
List<?> list = new ArrayList<?>();
产生以下错误:
required: class or interface without bounds
found: ?
2
但是这个
List<?> list = new ArrayList< Set<?> >();
编译成功。
3
还有这个:
List<Set<?>> list = new ArrayList< Set<?> >();
编译也成功了。
4
但是这个:
List<Set<Map<?,?>>> list = new ArrayList< Set<Map<String,String>> >();
生成
required: List<Set<Map<?,?>>>
found: ArrayList<Set<Map<String,String>>>
5
List<Set<?>> list = new ArrayList< HashSet<?> >();
生成
required: List<Set<?>>
found: ArrayList<HashSet<?>>
我对这些输出感到非常困惑。
我看到以下规律:
我只能在第一级从左侧部分到右侧部分替换?,并且类型应该在 内部相同,只是?和 ?是禁止的。
但我不明白为什么?
您能否提供如何使用通配符实例化泛型的通用规则?
【问题讨论】:
-
@Alboz 提到了关于数组的问题!!!当前问题与数组无关!!!
-
同一个原因!
-
因此不重复!
-
@Alboz 我不知道你想达到什么目标,但这个问题绝对是另一个问题!
标签: java generics wildcard instantiation