2013-07-04 14 views
5

To z article from oracle o anonimowych klas I czytał:wykonawcze anonimowych zajęcia dla dwóch lub więcej metod

klas anonimowych są idealne, jeśli trzeba zaimplementować interfejs który zawiera dwa lub więcej metod

Chociaż to jest idealne, jeśli trzeba wprowadzić mniej niż dwie metody, ponieważ nie trzeba tworzyć bardziej konkretnych nazwanych klas, ale jeśli trzeba zaimplementować więcej niż dwa, będą one bardziej nieczytelne.

Moje pytanie brzmi: Dlaczego stosowanie anonimowych klas z 2 lub więcej metod powinno być idealne?

+0

Nie zgadzam się. Jednym z najczęściej zaimplementowanych anonimowych interfejsów jest "Komparator", który ma tylko jedną metodę i jest w porządku. – Bohemian

+1

@Bohemian: Na razie masz rację, ale w JDK 8 * będziesz mógł zaimplementować 'Comparator' z wyrażeniem lambda i będzie ono lepsze niż klasa anonimowa. – jason

+0

@Jason może powinien oznaczyć to tagiem java8:/Zrobię to teraz ... – Bohemian

Odpowiedz

7

Usunąłeś to zdanie z kontekstu. Spójrz na zdanie tuż przed tym jednym:

Ponieważ interfejs EventHandler<ActionEvent> zawiera tylko jeden metody, można użyć wyrażenia lambda zamiast anonimowego klasy wypowiedzi. Więcej informacji można znaleźć w sekcji Lambda Expressions.

(nacisk przeze mnie)

Będziesz mógł użyć wyrażenia lambda zamiast anonimowych klas tylko z jednej metody w przyszłości, więc korzystanie anonimowa klasa ma sens tylko, jeśli interfejs ma więcej niż jedna metoda.

Czytelność może ucierpieć, jeśli ma wiele metod, ale nie ma innej konstrukcji językowej, która wymusza, że ​​konkretna implementacja może być używana tylko w jednym punkcie kodu.

+0

mm widzę, źle zrozumiałem, więc w jdk 8, interfejsy z tylko jedną metodą można użyć wyrażeń lambda jako "metod anonimowych" zamiast używać anonimowych klas lub będą one miały implementacja szkieletu dla wyrażenia lambda? – nachokk

+0

Jest to po prostu zwięzsza składnia (działa tylko wtedy, gdy trzeba podać jedną metodę). Pod maską, to wciąż ta sama anonimowa klasa, po prostu mniej pisania. – Thilo

+0

z wyrażeniem lambda bardziej interesuje Cię treść metody i parametry metody. A nazwa klasy jest wybierana na podstawie kontekstu, w którym używasz wyrażenia lambda. – MohamedSanaulla

1

To prawdopodobnie bierze pod uwagę nową zwięzłą składnię dostępną w Javie 8 (skrzyżowane palce) dla interfejsów pojedynczej metody (tj. Lambda Expressions). Zapewniłoby to lepszą opcję niż anonimowe klasy, jeśli interfejs rzeczywiście ma tylko jedną metodę.

3

Artykuł zawiera informacje z JDK 8, w którym to przypadku wyrażeń lambdy można używać do implementacji interfejsów jednofunkcyjnych zamiast korzystania z anonimowej klasy.

Tak więc propozycja metody 2+ dotyczy wyłącznie JDK 8, dla 7 i poniżej anonimowe klasy są jedyną metodą (no, poza pełną klasą) dla implementacji pojedynczej metody i wielu interfejsów metod.

Powiązane problemy