返回Generic Class类型时出现Java Compile错误

use*_*253 5 java generics interface class

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>
}
Run Code Online (Sandbox Code Playgroud)

我希望上面的代码没有错误,但是当我返回Child.class时出现编译错误.

Kep*_*pil 5

Child.class无论如何,你都不能告诉Java总是返回T.可能有其他类从父级扩展而不是a Child.此外,由于您没有T在任何地方使用,因此您的代码没有多大意义.两种可能的解决方

public Class<? extends Parent> getAClass() {
    return Child.class;
}
Run Code Online (Sandbox Code Playgroud)

也许

public <T extends Parent> Class<T> getAClass(Class<T> clazz){
    return clazz; 
}
Run Code Online (Sandbox Code Playgroud)

第二个例子编译,但如果T在类级别声明,可能会更有意义.

此外,我重命名了您的方法,以避免与现有getClass()方法发生名称冲突.