2013-07-04 11 views
5

Questo è da un article from oracle sulle classi anonime che leggevo:attuazione classi anonime per due o più metodi

classi anonime sono l'ideale se si deve implementare un'interfaccia che contiene due o metodi

Penso che sia l'ideale se devi implementare meno di due metodi, perché non è necessario creare classi con nome più concreto, ma se devi implementarne più di due sarà più illeggibile.

La mia domanda è: Perché l'implementazione di classi anonime con 2 o più metodi è l'ideale?

+0

Non sono d'accordo. Una delle interfacce anonime più comunemente implementate è un 'Comparator', e ha solo un metodo, e va bene. – Bohemian

+1

@Bohemian: Per ora hai ragione, ma in JDK 8 tu * sarà in grado di implementare 'Comparator' con un'espressione lambda e sarà meglio di una classe anonima. – jason

+0

@Jason forse avrebbe dovuto etichettarlo con java8:/lo farò ora ... – Bohemian

risposta

7

Hai preso quella frase fuori dal contesto. Guardate la frase immediatamente prima che uno:

Poiché l'interfaccia EventHandler<ActionEvent> contiene solo metodo , è possibile utilizzare un'espressione lambda invece di una classe anonima espressione. Vedere la sezione Lambda Expressions per ulteriori informazioni.

(enfasi da me)

sarete in grado di utilizzare l'espressione lambda invece di classi anonime con solo un singolo metodo, in futuro, in modo da utilizzare una classe anonima ha senso solo se l'interfaccia ha più di un metodo.

La leggibilità può risentirne se dispone di molti metodi, ma non esiste un altro linguaggio che imponga l'implementazione di un'implementazione specifica in un punto del codice.

+0

mm vedo, ho frainteso, quindi in jdk 8, interfacce con un solo metodo è possibile utilizzare espressione lambda come 'metodi anonimi 'invece di utilizzare classi anonime o avranno un'implementazione scheletrica per l'espressione lambda? – nachokk

+0

Sintassi più concisa (che funziona solo se è necessario fornire un singolo metodo). Sotto il cofano, è sempre la stessa classe anonima, solo meno digitando. – Thilo

+0

con espressione lambda sei più interessato al corpo del metodo e ai parametri del metodo. E il nome della classe viene scelto in base al contesto in cui stai usando l'espressione lambda. – MohamedSanaulla

1

Questo probabilmente sta prendendo in considerazione la nuova sintassi concisa disponibile in Java 8 (dita incrociate) per le interfacce a metodo singolo (ad esempio Lambda Expressions). Ciò fornirebbe un'opzione migliore rispetto alle classi anonime se l'interfaccia avesse effettivamente un solo metodo.

3

L'articolo include informazioni da JDK 8, nel qual caso le espressioni Lambda possono essere utilizzate per implementare interfacce a funzione singola invece di dover utilizzare una classe anonima.

Quindi il suggerimento del metodo 2+ è rigorosamente per JDK 8, per 7 e sotto le classi anonime sono l'unico modo (beh, al di fuori delle classi complete) per il metodo singolo e le implementazioni dell'interfaccia a più metodi.

Problemi correlati