反思和阶级延伸

时间:2014-11-29 14:12:02

标签: java reflection

我在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的方法。

有什么方法可以解决这个问题吗?非常感谢你。

1 个答案:

答案 0 :(得分:1)

TestCommand类中的方法为private,但在

Method[] meth = this.getClass().getMethods();

getMethods()只能返回public个(包括继承的)。

如果您想使用TestCommand中声明的方法,请使用getDeclaredMethods() 其他选项是将带注释的方法更改为 public