这是我的 Java 代码示例:
package com.company;
public class Main {
private static class Something<T>{
public void fun(Class<T> someClass){
someClass.cast(null);
}
}
private interface Hello{}
public static void some(Something<? extends Hello> mySomething, Class<? extends Hello> myClass){
mySomething.fun(myClass);
}
}
我在
mySomething.fun(myClass)
处收到一个奇怪的错误线:Required type: Class<? extends com.company.Main.Hello>
Provided: Class<? extends com.company.Main.Hello>
哪些是完全相同的类型...
我在这里错过了什么?
最佳答案
我认为问题在于“必需”和“提供”中的问号可能不同。假设我有两个 Hello
的实现:Hello1
和 Hello2
.我可以打电话:
some(new Something<Hello2>(), Hello1.class);
即履行了
some
的约定,但您不希望能够调用 new Something<Hello2>().someClass(Hello1.class)
.我相信你需要表达一次约束,通过制作
some
通用的:public static <T extends Hello> void some(Something<T> mySomething, Class<T> myClass)
现在这两个参数适当相关,所以调用
fun
已验证。
关于完全相同的类的 Java 泛型不兼容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61768843/