我有抽象类
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();
}
但是当我尝试调用方法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);
给我错误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()
);
但那只是给了我Cannot cast from Class<capture#1-of ?> to Command
。
我提前为我糟糕的命名道歉。
答案 0 :(得分: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();
或者,您可以使用klass.getConstructor(...)
方法