2011-04-04 51 views
7

我剛剛通讀了關於SCJP book中方法本地內部類的一章,我真的很想考慮它們的任何實際用途。Java中的方法本地內部類提供了什麼好處?

我一直覺得這個方法應該儘可能的小和特定於他們的任務(Orthogonality IIRC),所以即使是最簡單的內部類也會引入分叉和笨拙的方法。

任何人都可以爲方法本地內部類提供一個很好的實際用法嗎?到目前爲止,我覺得我可能需要純粹爲了通過考試而理解它們,而不是用於日常編碼。

Cheers

+0

它們通常用於實現回調方法。 – helpermethod 2011-04-04 19:48:08

+0

到目前爲止,我只用了一次:我需要一個適當的鍵類用於方法中的臨時HashMap。 – Landei 2011-04-04 21:23:01

+0

現實世界的方法的局部內部類的使用位置: http://stackoverflow.com/a/14900700/82609 – 2013-02-15 18:09:49

回答

11

在大多數情況下(例如,對於動作監聽器,可運行參數等),您將使用匿名類而不是方法局部命名類。

但有一件事情是名爲類可以做的和匿名類不能:實現多個接口,或者擴展一個類和接口了。此外,您可以創建此類的多個對象(不使用循環)。

+0

「另外,您可以創建此類的多個對象(不使用循環)。」 - 你當然可以。即使在定義類的方法的多個調用中,該類仍然是相同的。 – 2011-04-08 10:24:44

1

本地類允許從父類中取出邏輯並將其對象化。這將功能從它不屬於的地方移除,並將其放入它自己的類中。但是如果這個新對象只需要很短的時間,只需要一段代碼的時間呢?那麼,這就是本地課程適合的地方。

3

我想說更好的封裝是好處。

2

當您嘗試執行「功能」操作或將代碼傳遞給稍後調用的另一個對象時,方法local內部類很有用。在大多數情況下,像這樣的類只被調用或使用過一次,所以不需要在其他地方定義它,並迫使讀者去尋找它。未來的Java版本可能會用「閉包」替代這些類型的內部類的大多數用例。

常見的情況是當您編寫調用某個其他方法或啓動新線程的事件偵聽器時。

+0

對於使用匿名類的代替方法 - 本地命名類是更好的。 – Raedwald 2011-05-12 14:06:00

0

我覺得Runnable實現傳遞給主題:

Thread t = new Thread(new Runnable() { 
    void run() { 
     ... 
    } 
}); 

這是匿名類,任何匿名類是內爲好。

+1

但runnable不是一個方法本地內部類(它是一個普通的匿名內部類) – Chii 2011-05-09 12:47:20