我有抽象类
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
.
我为我糟糕的命名提前道歉。
最佳答案
Class.forName
正在返回 Class<?>
对象,不是 Command
.您需要使用 Class<?>
中的构造函数之一创建命令对象。
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(...)
方法
关于java - 该方法未定义类型 Class<capture#3-of ?扩展命令>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22290467/