覆盖侦听器和线程

时间:2013-05-25 11:52:33

标签: java coding-style override

在当前代码中覆盖(实现)侦听器或线程行为或创建实现或扩展它的新类是否是个好主意?

e.g。

public doSomething() {
    Thread thr = new Thread(){
        public void run() {
            //thread business
        }
    };
    thr.start();
}

public class MyThread extends Thread {
    public void run() {
        //thread business
    }
}
......
public doSomething() {
    MyThread thr = new MyThread();
    thr.start();
}

请指出这两种做法的所有利弊。

1 个答案:

答案 0 :(得分:-1)

第一种做法从来都不是一个好主意。当我们这样做时,你实际上创建了一个内部类。由于内部类具有保存父类对象的隐式属性,因此可能导致内存泄漏。

由于上述原因,在自己的文件中创建新类的第二个选项总是更好。

编辑2:

第一种做法从来都不是一个好主意。当我们这样做时,你实际上创建了一个内部类。由于内部类具有保存父类对象的隐式属性,因此可能导致内存泄漏。

由于上述原因,在自己的文件中创建新类的第二个选项总是更好。

编辑2:

public class MyThread extends Thread {

    private WeakReference<Button> mButton;

    public MyThread(Button button) {
        mButton = new WeakReference(button);
        // Use this button where-ever you want
    }

    public void run() {
        //thread business
    }
}
......
Button btn = ...;
public doSomething() {
    MyThread thr = new MyThread(btn);
    thr.start();
}