我有5种不同的方法,比如
public void met1(){}
public void met2(){}
public void met3(){}
public void met4(){}
public void met5(){}
我想从1到5调用此方法是否有任何方便的方法来执行此操作。
我不想一个接一个地打电话,或者我不想把方法调用放在其他方法中。
我该怎么做?
答案 0 :(得分:3)
我相信你可以用反射来做到这一点:
YourClass classInstance = new YourClass();
for (int i = 1; i < 6; i++) {
Method yourMethod = YourClass.class.getMethod("met" + i);
method.invoke(instance);
}
没有测试过,所以没有保证。
答案 1 :(得分:2)
您是否研究过流畅的设计模式? http://www.javacodegeeks.com/2013/01/fluent-object-creation.html
示例可能是这样的:
myObject.met1().met2().met3().met4().met5().result();
答案 2 :(得分:1)
你可以用反射做到这一点,正如其他答案之前提到的那样。如果可能,通常会避免反思。
实际上,解决您关注的最常见的设计模式是责任链 http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern
答案 3 :(得分:0)
通过名称调用方法的唯一方法是通过反射。有关如何执行此操作,请参阅此文章:
How do I invoke a Java method when given the method name as a string?
这样的事情应该有效:
for (int i = 1; i < 6; i++){
java.lang.reflect.Method method;
try {
method = this.getClass().getMethod("met" + i);
method.invoke(this);
} catch (SecurityException e) {
// ...
} catch (NoSuchMethodException e) {
// ...
}
}