Java泛型的双通配符参数化(嵌套通配符)

帕维尔·S。

我正在使用第三方库(Reflections)中的一种方法,该方法应该查找给定类型的子类型,并且看起来像

public <T> Set<Class<? extends T>> getSubTypesOf(final Class<T> type) {
...

当呼叫者代码看起来像

Class<?> type = ...
Set<Class<?>> subTypes = reflections.getSubTypesOf(type);

我收到一个编译错误:“ cannot convert from Set<Class<? extends capture#19-of ?>> to Set<Class<?>>”。以下解决了这种情况:

Class<?> type = ...
Set<?> subTypes = reflections.getSubTypesOf(ht);

所以看起来唯一可能的错误补救办法Set<Class<? extends ?>>Set<?>但不是Set<Class<?>>为什么会这样呢?感谢您对此的任何解释。

保罗·贝洛里亚

请改用以下内容:

Set<? extends Class<?>> subTypes = reflections.getSubTypesOf(type);

问题是嵌套通配符不执行类型捕获声明一个Set<Class<?>>方法是“任何类型的一组类”,而返回的是一个Set<Class<? extends capture#19-of ?>>,这意味着“从某个特定未知类型扩展的任何类型的一组类”。在这种情况下,“特定未知类型”是从的type参数派生的,该类型参数T是从type无限制的通配符捕获(?in中Class<?>推断的

例如,假装“特定未知类型”为Number

Class<Number> type = ...
Set<Class<?>> subTypes = reflections.getSubTypesOf(type);

在这里,getSubTypesOf返回Set<Class<? extends Number>>该类型不可分配,Set<Class<?>>因为泛型类型不是协变的但是,通配符捕获可以帮助我们表达协方差,并允许类似的类型Set<? extends Class<?>>需要注意的是,除了null这样的集合,我们什么都不能添加,因为我们不知道它的具体类型。

相关文章:

类似职位:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java泛型:具有嵌套通配符参数的赋值

来自分类Dev

Java HashMap使用通配符嵌套泛型

来自分类Dev

Java HashMap使用通配符嵌套泛型

来自分类Dev

Java泛型通配符与类型化泛型用法

来自分类Dev

Java泛型中的通配符

来自分类Dev

Java泛型中的通配符

来自分类Dev

在Java中将通配符与嵌套泛型一起使用

来自分类Dev

Java泛型用于参数化类:无限通配符与原始类型

来自分类Dev

Java泛型用于参数化类:无限通配符与原始类型

来自分类Dev

泛型,类型参数和通配符

来自分类Dev

Java泛型:定义泛型类时的通配符和类型参数语法

来自分类Dev

Java泛型:不兼容的通配符捕获

来自分类Dev

无法设置Java泛型通配符边界

来自分类Dev

从Scala调用Java通配符泛型方法

来自分类Dev

Java泛型-通配符的目的(下限除外)?

来自分类Dev

Java泛型查询(上界通配符)

来自分类Dev

Java泛型,未绑定通配符<?>与<Object>

来自分类Dev

Java泛型中的边界扩展通配符

来自分类Dev

泛型Java通配符和子类型

来自分类Dev

Java泛型中的边界扩展通配符

来自分类Dev

Java泛型:覆盖泛型方法,通配符速记?

来自分类Dev

Java 7/8泛型中嵌套通配符与可分配性的差异

来自分类Dev

嵌套参数的通配符

来自分类Dev

Java泛型中的用法通配符或Bounded类型参数是什么?

来自分类Dev

C#泛型:通配符

来自分类Dev

地图的通配符泛型()方法

来自分类Dev

任意泛型列表的通配符

来自分类Dev

泛型上的通配符错误

来自分类Dev

Java中的通配符参数化类型