我在Java中使用Reflection时遇到问题。这是我的SubCommandExecutor类,该类处理所有发送的命令:
public class SubCommandExecutor implements CommandExecutor{
@Override
public final boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (args.length > 0){
Method[] meth = this.getClass().getMethods();
for (int i = 0; i < meth.length; i++){
SubCommand sub = meth[i].getAnnotation(SubCommand.class);
if (sub != null){
// some reflaction staff
}
}
} else {
// ...
}
}
}
每次执行命令时,都会调用onCommand方法。在onCommand方法中,我想遍历所有类方法以查找是否有带有SubCommand批注的方法。
我什至创建一个扩展SubCommandExecutor的TestCommand类:
public class TestCommand extends SubCommandExecutor {
@SubCommand(command="a")
private boolean cmdA(CommandSender sender){
// ...
}
@SubCommand(command="b")
private boolean cmdB(CommandSender sender, String[] args){
// ...
}
@SubCommand(command="c")
private boolean cmdC(CommandSender sender, String[] args){
// ...
}
}
问题是,在我调用TestCommand类的onCommand方法(由SubCommandExecutor继承)的地方,它仅通过SubCommandExecutor的方法循环,而没有通过TextCommand的方法循环。
有什么办法可以解决这个问题?非常感谢你。
最佳答案
TestCommand
类中的方法是private
,但在
Method[] meth = this.getClass().getMethods();
getMethods()
只能返回public
个(包括继承的)。如果要使用在
TestCommand
中声明的方法,请使用getDeclaredMethods()
。另一种选择是将带注释的方法更改为公开。
关于java - 反射(reflection)和延伸的类(Class),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27203193/