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(){}
}
我想分解我的代码,因为我确实在两个 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(){}
}