我想分解我的代码,因为我在两个类中确实有一个相同的代码块。但它们是匿名的可运行类,所以这里是对我的情况的描述
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中没有函数指针,如果可能,我不想做反射。
非常感谢你的帮助
答案 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(){}
}