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.
我提前为我糟糕的命名道歉.
该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(...)方法