0

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

例如

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

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

4

1 回答 1

-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();
}
于 2013-05-25T12:02:29.463 回答