现在,我正在开发一个项目,我的设置是这样的:我有一个类(Foo
),里面有几个方法,必须在不同的时间被主要激活类。
我已经研究了很长一段时间了,我唯一能找到的就是Timer
课程,它不太合适,因为它似乎只是一个课程的时间,我不喜欢这个基本程序需要25个不同的类。
如何单独激活Foo
中的每种方法?
答案 0 :(得分:1)
以下类使用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
时捕获的最终异常。