JAVA:因子代码 - >可运行的匿名类

时间:2016-04-20 00:01:30

标签: java multithreading runnable anonymous-class

我想分解我的代码,因为我在两个类中确实有一个相同的代码块。但它们是匿名的可运行类,所以这里是对我的情况的描述

class A {
    A(){}
    do_A_function(){}
}
class B extends A{
    B(){
        Runnable runB=new Runnable() {
            public void run() {
                while (true) {
                    super.do_A_function();
                    do_B_function();                    
                }
            }
        };
        new Thread(runB).start();
    }

    do_B_function(){}
}
class C extends A{

    C(){
        Runnable runC=new Runnable() {
            public void run() {
                while (true) {
                    super.do_A_function();
                    do_C_function();                    
                }
            }
        };
        new Thread(runC).start();
    }

    do_C_function(){}
}

你可以猜到我想要那样的东西

class A {
    A(){
        Runnable runC=new Runnable() {
            public void run() {
                while (true) {
                    do_A_function();
                    do_C_function() OR do_B_function();
                }
            }
        };
        new Thread(runA).start();

    }
    do_A_function(){}
}

class B extends A{
    B(){
        super();
    }
    do_B_function(){}
}

class C extends A{
    C(){
        super();
    }
    do_C_function(){}
}

可能在super()调用中有一个参数,但Java中没有函数指针,如果可能,我不想做反射。

非常感谢你的帮助

1 个答案:

答案 0 :(得分:0)

这样的事情:

public class MyRunnable implements Runnable {
    private final Listener listener;

    public MyRunnable(Listener listener) {
        this.listener = listener;
    }

    public void run() {
        while (true) {
            doA();
            listener.callback()
        }
    }
}

public interface Listener {
    void callback();
}

class B implements Listener {
    B() {
        new Thread(new MyRunnable(this)).start();
    }

    @Override
    public void callback() {
        do_B_function();
    }

    public void do_B_function(){}
}