JAVA : 因式分解代码 -> 可运行匿名 class

JAVA : factorise code -> runnable anonymous class

我想分解我的代码,因为我确实在两个 class 中有一个巨大的相同代码块。但是它们是匿名运行的 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 中没有函数指针,如果可能的话我不想做反射。

非常感谢您的帮助

像这样的事情怎么样:

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(){}
}