This question ma teraz ponad 3 lata i dotyczy konkretnie Javy 8, z zaakceptowaną odpowiedzią również cytując numer Java SE 8 Final Specification.Czy będzie możliwe opisanie wyrażenia lambda w Java 9?
Byłbym zainteresowany, gdyby coś w tym pytaniu zmieniło się w Javie 9: Czy istnieje sposób na opisanie wyrażenia lambda podobnego do opisywania odpowiedniej anonimowej klasy?
Przykład:
Adnotacja:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
public @interface MyTypeAnnotation {
public String value();
}
adnotacja Praca anonimowych Klasa:
Consumer<String> consumer = new @MyTypeAnnotation("Hello ") Consumer<String>() {
@Override
public void accept(String str) {
System.out.println(str);
}
};
adnotacji wyrażenie Lamba, obecnie nie działa w Java 8:
Consumer<String> myAnnotatedConsumer = @MyTypeAnnotation("Hello") (p -> System.out.println(p));
Jedną z istotnych różnic między tymi dwoma konstrukcjami jest to, że anonimowa klasa nadal jest deklaracją klasy.Wyrażenie lambda nie tworzy nowej klasy (lub niekoniecznie, jeśli jest to szczegół implementacji). Mam wrażenie, że adnotacje są dozwolone tylko w * deklaracjach *. Czy adnotacje są dozwolone w * wyrażeniach *? – Lii