在java中动态调用方法的方法有哪些

时间:2016-03-11 13:04:16

标签: java methods reflection invoke

接口:

interface A
{
   void run(String methName);
}

类里面:

class X implements A
{
    void run(String methName)
    {

    }
    void m1()
    {

    }
    void m2()
    {
    }
    void m3()
    {

    }

}

我想从run方法动态调用m1,m2和m3方法而不使用反射机制

2 个答案:

答案 0 :(得分:2)

不要过度思考:

switch (methName) {
  case "m1": m1(); break;
  case "m2": m2(); break;
  case "m3": m3(); break;
  default: throw new AssertionError();
}

如果你想做一些更安全的事情,你可以定义一个策略枚举,例如:

enum Strategy {
  M1 { @Override public void run(X instance) { instance.m1(); } },
  M2 { @Override public void run(X instance) { instance.m2(); } },
  M3 { @Override public void run(X instance) { instance.m3(); } };

  public abstract void run(X instance);
}

然后

 void run(Strategy strategy) {
   strategy.run(this);
 }

现在您无法传递任意方法名称,但仅限于Strategy的实例。

答案 1 :(得分:1)

this post中所述,

  

反射是一种语言在运行时检查和动态调用类,方法,属性等的能力。

所以说你想要在没有反射的情况下进行反射是没有意义的。