类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 的 method1
或 method2
。我怎样才能做到这一点?
最佳答案
如果您不想使用反射(这是一个很好的目标),那么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/