java - 如何在Java中通过名称(字符串)调用方法?

标签 java

A的每个实例都有一个类B的实例。 A 应根据其成员变量 method_num 调用 B 中的不同方法。这是一个实现我想要的功能:

public class A {
    private B myB = new B();
    public int method_num = 1;
    public callBMethod() {
        if ( method_num == 1 )
            myB.method1();
        else
            myB.method2();
    }
}

public class B {
    public method1() { }
    public method2() { }
}

但我不想执行 myA.method_num = 1,而是希望能够以某种方式直接传递 B 的 method1method2。我怎样才能做到这一点?

最佳答案

如果您不想使用反射(这是一个很好的目标),那么enum有一些巧妙的功能,允许您设置enum 作为代理。

public class A {
  private B myB = new B();
  public int method_num = 1;

  public void callBMethod() {
    // Could do it by name.
    BMethods.valueOf("method1").call(myB);
    // Or by number.
    BMethods.values()[method_num].call(myB);
  }

}

enum BMethods{
  method1 {
    @Override
    public void call(B b) {
      b.method1();
    }
  },
  method2 {
    @Override
    public void call(B b) {
      b.method2();
    }
  };

  public abstract void call (B b);
}

public class B {
  public void method1() {
  }

  public void method2() {
  }

}

关于java - 如何在Java中通过名称(字符串)调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18718217/

相关文章:

java - 无法使用最新的 selenium 驱动程序 + Chrome 驱动程序启动带有扩展名的 URL

Java泛型编程: Determining if class extends another

java - java中如何查看RAM中使用了多少内存

java - 在JAVA中以编程方式监控JVM的堆栈区域?

java - org.hibernate.HibernateException : Access to DialectResolutionInfo cannot be null when 'hibernate.dialect'

java - Java 内存数据库推荐

java - 使用初始化按需持有者习惯用法会给出 NoClassDefFoundError

java - 如何使用 Maven for App Engine 设置 Java Eclipse (Juno) 动态 Web 项目

java - 如何将资源目录而不是单个文件包含到编译类路径中?

java - Spring mvc文件上传