我在理解以下两个方法签名之间的差异时遇到问题。
abstract class Example {
void test() {
Class<? extends Parent<? extends Child>> clazz = null;
works(clazz);
error(clazz); // Error
}
abstract <T extends Child> Parent<T> works(Class<? extends Parent<? extends T>> clazz); // Method1
abstract <T extends Child> Parent<T> error(Class<? extends Parent<T>> clazz); // Method2
interface Child {}
interface Parent<U extends Child> {}
}
Run Code Online (Sandbox Code Playgroud)
编译此代码会出现以下错误(使用 1.8.0_271、11.0.9 和 15.0.1 测试)。
…/src/main/java/Example.java:6:5
java: method error in class Example cannot be applied to given types;
required: java.lang.Class<? extends Example.Parent<T>>
found: java.lang.Class<capture#1 of ? …Run Code Online (Sandbox Code Playgroud)