在当前代码中覆盖(实现)侦听器或线程行为或创建实现或扩展它的新类是否是个好主意?
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();
}
请指出这两种做法的所有利弊。
答案 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();
}