Java泛型完全相同的类的不兼容类型
下面是我的Java代码示例:Java泛型完全相同的类的不兼容类型,java,generics,Java,Generics,下面是我的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 stat
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);
}
}
都是完全相同的类型
我在这里遗漏了什么?
类我认为问题在于“必需”和“提供”中的问号可能不同。假设我有两个Hello
的实现:Hello1
和Hello2
。我可以打电话:
some(newsomething(),Hello1.class);
这满足了some
的约定,但您不希望能够调用newsomething().someClass(Hello1.class)
我认为您需要通过使some
generic来表达一次约束:
publicstaticvoidsome(某物mySomething,类myClass)
现在这两个参数是适当相关的,因此对fun
的调用是有效的。您需要将some()
定义更改为:
public static <T extends Hello> void some(Something<T> mySomething, Class<T> myClass) {
mySomething.fun(myClass);
}
publicstaticvoidsome(某物mySomething,类myClass){
mySomething.fun(myClass);
}
这是因为在Something
类中,T
类型在fun
声明中的使用方式是T
的实际类型必须完全相同
但是在你的方法中,?扩展Hello
可以是不同的类Hello
可以有多个子类。我看不到任何标有“Here!”(wink,wink)的行,并且您没有发布main
方法。@Amongalen您并不真的需要main方法来显示编译时错误。
public static <T extends Hello> void some(Something<T> mySomething, Class<T> myClass) {
mySomething.fun(myClass);
}