返回泛型类类型时发生Java编译错误 公共接口父级{ } 公共类子级实现父级{ } 公共类getClass(){ return Child.class;//编译错误,将强制转换添加到类 }
我希望上面的代码没有错误,但是当我返回Child.class时,我得到了编译错误。你不能告诉Java总是返回返回泛型类类型时发生Java编译错误 公共接口父级{ } 公共类子级实现父级{ } 公共类getClass(){ return Child.class;//编译错误,将强制转换添加到类 },java,class,generics,interface,Java,Class,Generics,Interface,我希望上面的代码没有错误,但是当我返回Child.class时,我得到了编译错误。你不能告诉Java总是返回Child.class,不管t。从父类扩展的其他类可能不是子类。另外,由于您没有在任何地方使用T,因此您的代码没有多大意义。两种可能的解决办法: public interface Parent{ } public class Child implements Parent{ } public <T extends Parent> Class<T> getClas
Child.class
,不管t
。从父类扩展的其他类可能不是子类
。另外,由于您没有在任何地方使用T
,因此您的代码没有多大意义。两种可能的解决办法:
public interface Parent{
}
public class Child implements Parent{
}
public <T extends Parent> Class<T> getClass(){
return Child.class; // compile error, add cast to Class<T>
}
public Class如果此代码是合法的,则可以编写:
public <T extends Parent> Class<T> getAClass(Class<T> clazz){
return clazz;
}
Class clazz=instance.getAClass();
(假设SomeOtherChildClass
也扩展了Parent
),对于现有实现,这显然会在运行时失败
我没有提供“更正”的代码,因为我不确定您想做什么。查看以下内容
Class<SomeOtherChildClass> clazz = instance.getAClass();
公共类主{
公共接口父{}
公共类子级实现父级{}
公共类BadChild实现父{}
公共静态类getClazz(){
return Child.class;//编译错误,将强制转换添加到类
}
公共静态void main(字符串[]args){
Class clazz=Main.getClazz();
}
}
使用BadChild
类型调用方法getClazz()
对调用方有效。如果您可以编译会导致运行时错误的方法。这就是为什么这是被禁止的。公共类如果您总是要返回Child.Class
,您应该使用Class
。。。仅在有意义的地方使用泛型。。。
Class<SomeOtherChildClass> clazz = instance.getAClass();
public class Main {
public interface Parent{}
public class Child implements Parent{}
public class BadChild implements Parent {}
public static <T extends Parent> Class<T> getClazz() {
return Child.class; // compile error, add cast to Class<T>
}
public static void main(String[] args) {
Class<BadChild> clazz = Main.<BadChild>getClazz();
}
}