现在,我正在做一个项目,我的设置是这样的:我有一个类 ( Foo
),其中有几个方法,必须由主类在不同时间激活。
我已经研究了很长一段时间,我唯一能找到的就是这个Timer
类,它不太管用,因为它似乎只能为一个类计时,而且我不想要这样一个 25 个不同的类基本程序。
如何Foo
单独激活每种方法?
下面的类使用TimerTask
( MethodTimerTask
) 的扩展来工作,它接受输入Foo
实例和要调用的方法名称。
这样,使用反射,可以在不同的时间调用不同的方法,只需要一个扩展TimerTask
类。
public class MyTimerTaskExample {
/**
* @param args
*/
public static void main(String[] args) {
Timer timer = new Timer();
Foo foo = new Foo();
timer.schedule(new MethodTimerTask(foo, "method1"), 1000);
timer.schedule(new MethodTimerTask(foo, "method2"), 3000);
}
public static class MethodTimerTask extends TimerTask {
private String methodName;
private Foo fooInstance;
private Exception exception;
public MethodTimerTask(Foo fooInstance, String methodName) {
this.methodName = methodName;
this.fooInstance = fooInstance;
}
@Override
public void run() {
try {
Foo.class.getMethod(methodName).invoke(fooInstance);
} catch (Exception e) {
this.exception = e;
}
}
public Exception getException() {
return exception;
}
public boolean hasException() {
return this.exception != null;
}
}
public static class Foo {
public void method1() {
System.out.println("method1 executed");
}
public void method2() {
System.out.println("method2 executed");
}
}
}
奖励:该方法返回执行时getException()
捕获的最终异常。methodName
Foo