0

现在,我正在做一个项目,我的设置是这样的:我有一个类 ( Foo),其中有几个方法,必须由主类在不同时间激活。

我已经研究了很长一段时间,我唯一能找到的就是这个Timer类,它不太管用,因为它似乎只能为一个类计时,而且我不想要这样一个 25 个不同的类基本程序。

如何Foo单独激活每种方法?

4

1 回答 1

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()捕获的最终异常。methodNameFoo

于 2012-11-16T04:16:03.027 回答