接口:
interface A
{
void run(String methName);
}
类里面:
class X implements A
{
void run(String methName)
{
}
void m1()
{
}
void m2()
{
}
void m3()
{
}
}
我想从run方法动态调用m1,m2和m3方法而不使用反射机制
答案 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)