Java 泛型 : unbounded wildcard generalization not working past second level

标签 java generics

<分区>

我想这是一个非常令人困惑的标题,但我不知道还能叫什么 - 可能也在某处回答过,但我找不到任何东西。举个例子:

List<Class<? extends Integer>> myList;
void foo() {
    bar(myList);
}
void bar(List<Class<?>> a) { /* ... */ }

它不编译(不适用的参数,它说)。如果我删除边界它工作正常:

List<Class<?>> myList;
void foo() {
    bar(myList);
}
void bar(List<Class<?>> a) { /* ... */ }

Class<? extends Integer>只是比 Class<?> 更具体.它怎么停止工作了?请注意,此问题仅出现在二级泛型中。如果没有列表,则为 Class<? extends Integer>Class<?> , 它也有效。但是当泛型深度达到两个或更多级别时,它似乎停止工作。任何原因/解决方法/等?

最佳答案

请注意 List<B>不是 List<A> 的子类型即使BA 的子类型.因此,List<Class<? extends Integer>>不是 List<Class<?>> 的子类型即使你可以分配 Class<? extends Integer>反对 Class<?>多变的。只需考虑 bar , 调用 a.add(Object.class) 是合法的, 作为 Class<Object>Class<?> 的子类型.

因此您想要扩展 bar List<? extends Class<?>> 的参数类型.

关于Java 泛型 : unbounded wildcard generalization not working past second level,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26153181/

相关文章:

java - 无法使用批处理文件执行java程序

ios - Swift:如何获取具有可用数组 MirrorType 的数组元素类型

Java泛型接口(interface)实现不能省略类型参数?

ios - Swift:如何从函数返回类类型

c# - 由于泛型类型推断的限制,无法使用泛型来改进 API

c# - 如何编写包装类以使用部分泛型类型推断?

java - 在 Java 中导入包

java - 如何让子类用扩展类型重写父类抽象方法?

java - 在 Xampp/phpmyadmin 中创建外键的问题

java - JBoss 是否缓存类文件?