Java:继承类不能在方法参数中转换为超类

Ben*_*ler 5 java parameters inheritance casting parameter-passing

我有一个泛型类作为参数的此方法:

myMethod(Class myclass){
    Superclass superclass = myclass;
}
Run Code Online (Sandbox Code Playgroud)

然后我通过传递超类的子类来使用该方法

myMethod(Mychildclass.class)
Run Code Online (Sandbox Code Playgroud)

Netbeans正在警告我使用通用的"Class".但是这很好用.如果我将方法的参数更改为更具体的参数

myMethod(Class<Superclass> myclass){
    this.superclass = myclass;
}
Run Code Online (Sandbox Code Playgroud)

然后我在尝试使用我的方法时遇到错误:

incompatibles types: Class<Mychildclass> cannot be converted to Class<Superclass>
Run Code Online (Sandbox Code Playgroud)

所以我的问题:为什么这不起作用?如何让Netbeans高兴不给我任何警告和错误消息?

Ste*_*han 5

试试这个:

private Class<? extends Superclass> superclass;

void myMethod(Class<? extends Superclass> myclass){
    this.superclass = myclass;
}
Run Code Online (Sandbox Code Playgroud)
  • 如果您使用Class<Superclass>,
    只有Superclass.class预期.

  • 如果您使用Class<? extends Superclass>,
    Superclass.class或预期其任何子类.