类型Class <capture#3-of?的方法未定义?extends Command>

Fra*_*ina 1 java generics abstract-class casting subclass

我有抽象类

package main;

public abstract class Command {
    protected final String key;

    public Command(String key) {
        this.key = key;
    }

    public abstract void function(String[] args);
    public abstract void help();
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试调用该方法时function(String[] args),尽管处于一种令人困惑且过于复杂的方式,但问题随之而来.


Class<? extends Command> x = (Class<? extends Command>) Class.forName(
        "main.Commands$" +
        String.valueOf(command.toCharArray()[0]).toUpperCase() +
        command.substring(1).toLowerCase()
);

x.function(args);
Run Code Online (Sandbox Code Playgroud)

给我错误 The method function(String[]) is undefined for the type Class<capture#3-of ? extends Command>

我或者尝试了以下方法:

Command x = (Command) Class.forName(
        "main.Commands$" +
        String.valueOf(command.toCharArray([0]).toUpperCase() +
        command.substring(1).toLowerCase()
);
Run Code Online (Sandbox Code Playgroud)

但那只是给了我Cannot cast from Class<capture#1-of ?> to Command.

我提前为我糟糕的命名道歉.

Mic*_*son 6

Class.forName函数返回一个Class<?>对象,而不是一个Command.您需要使用Class<?>对象中的一个构造函数创建Command .

Class<Command> klass = (Class<Command>) Class.forName(
    "main.Commands " +
    String.valueOf(command.toCharArray([0]).toUpperCase() +
    command.substring(1).toLowerCase()
);

Command x = klass.newInstance();
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用该klass.getConstructor(...)方法