NOTE:
我知道這是危險地接近許多其他問題。然而,我沒有看到任何特別與Android的OnClickListener接口有關的東西。我在一般意義上問。通過匿名類擴展接口VS實例化
我明白通過一個匿名類... 一拉實例化一個接口的區別:和擴展接口
private final Runnable runnable = new Runnable() {
@Override
public void run() {
draw();
}
};
...。
public class ClassyClass implements Runnable {
...
//do other cool stuff here
...
@Override
public void run() {
draw();
}
...
//and more here
...
}
但是,除了從諸如OnClickListener
接口的明顯好處是有很強的優勢,以任一選項?
我認爲擴展它將是明顯的選擇,因爲您已經創建了該對象 - 不需要重複工作。這是正確的嗎?
我問在一般意義上,但是,因爲我目前Runnable
工作,如果它已經從任一選項我很想知道看到一個優勢。
非常感謝。我讚賞具體的贊成/反對。最後一個問題。我有點得到它,我已經看到其他人談論泄漏(在前1),但你能具體解釋爲什麼它發生? – BrassApparatus
@BrassApparatus:發生這種情況的原因是,內部類通過設計隱式引用其封閉對象,以便能夠訪問其字段和方法。就像在第二個示例的打印機中有一個PrintBuilder字段,並將'this'作爲Printer構造函數的參數傳遞。 –
@JBNizet陷阱,謝謝。我感謝所有的幫助。 – BrassApparatus