2013-07-04 26 views
5

這是一個article from oracle約匿名類我正在讀:實現匿名類的兩種以上的方法

匿名類是理想的,如果你要實現包含兩種以上的方法

接口

我雖然是理想的,如果你要實現少於兩個方法,因爲你並不需要做出更多具體命名類,但是如果你要實現兩個以上的會更不可讀。

我的問題是: 爲什麼要實現匿名類有2個或更多的方法是理想的?

+0

我不同意。最常用的匿名接口之一是一個「比較器」,它只有一個方法,它就好。 – Bohemian

+1

@Bohemian:現在,你是對的,但是在JDK 8中,你將*能夠用一個lambda表達式實現'Comparator',它會比匿名類更好。 – jason

+0

@Jason也許他應該用java8標記它:/我現在就做它... – Bohemian

回答

7

你把這句話放在了上下文之外。在這之前,立即看一句:

因爲EventHandler<ActionEvent>接口包含只有一個 方法,你可以使用lambda表達式而不是匿名類 表達。有關更多信息,請參閱部分Lambda Expressions

(由我強調)

你就可以只用在未來的一個方法使用lambda表達式,而不是匿名類的,所以使用匿名類纔有意義,如果你的接口擁有更多比一種方法。

可讀性可能會受到影響,如果它有很多方法,但有強制執行一個特定的實現可以只在代碼中的一個點不使用任何其他語言結構。

+0

毫米我看,我誤解了,所以在jdk 8,接口只有一個方法,你可以使用lambda表達式作爲'匿名方法',而不是使用匿名類或他們將有lambda表達式的框架實現? – nachokk

+0

這只是一個更簡潔的語法(只有在需要提供單個方法時纔有效)。在引擎蓋下,它仍然是同一個匿名類,只是少打字。帶有lambda表達式的 – Thilo

+0

您更關心方法體和方法參數。並根據您使用lambda表達式的上下文來挑選類名。 – MohamedSanaulla

1

這可能是考慮到在Java中8提供的新簡潔的語法(手指交叉),用於單方法接口(即Lambda Expressions)。如果接口確實只有一個方法,那將提供比匿名類更好的選項。

3

該製品包括從JDK 8的信息,在這種情況下Lambda表達式可以被用來實現而不必使用匿名類單功能的接口。

所以2+方法建議是嚴格JDK 8,7和下面匿名類的唯一方法(當然,全類的外部)爲單一的方法和多種方法接口實現。