2011-08-16 19 views
2

OnClickListener創建對象是一個靜態的界面,但我從OnClickListener實例。從OnClickListener接口

我很困惑,不知道該才能生成Java從接口的對象?

我們爲什麼不創造具體的類,從OnClickListener接口繼承? enter image description here

enter image description here

+1

什麼是靜態接口?你不是從接口生成一個對象,你實際上創建了一個接口的內聯實現... – DeyyyFF

+0

_What我們不創建具體類,從OnClickListener接口繼承嗎?_這正是發生了什麼,只是在一個簡短的符號。 – biziclop

+0

但有新詞。新的OnClickListener是相等的類Hoob實現了OnClickListener?新詞是用來生成一個對象不是嗎? – uzay95

回答

5

這就是所謂的匿名內部類。 Java標準版的Swing文檔涵蓋了here,我想它在Android開發中的用途大致相同。它允許您更簡單地將各種事件處理程序接口連接到觸發這些事件的組件。例如,如果在此OnClickListener中執行的操作在其他任何地方都不需要,那麼您現在已將其限制爲唯一使用它的類。你不需要源代碼樹中的另一個類文件,這更明顯的是在那個特定的UI組件中發生了什麼。

的幕後,編譯器使用自動生成的名稱,它確實實現OnClickListener創建類。您可能會在堆棧跟蹤中看到此類,其類名爲com.foo.Class$1$1是編譯器爲您的類生成的內容。

+0

+1爲com.foo.Class $ 1的東西。不知道:) – Prine

+0

是的,我忘記了自己最終做了什麼,但是從Sun的文檔中看不出來。我猜它在實際的語言規範中更精確地指定了它。 –

1

您還沒有實例化的接口。什麼你用下面的代碼做的是直接創建的接口的實現,並將其存儲在tv_onClick變量..

private OnClickListener tv_onClick = new OnClickListener() { 
    public void onClick(View arg0) { } 
}