This questionは現在3歳以上であり、具体的にはJava 8に対応しており、受け入れられた回答もJava SE 8 Final Specificationとなっています。ラムダ式にJava 9でアノテーションを付けることは可能でしょうか?
この質問に関する何かがJava 9で変更される場合、私は興味があります:対応する匿名クラスに注釈を付けるのと同様のラムダ式に注釈を付ける方法はありますか?
例:
注釈:匿名クラスの
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
public @interface MyTypeAnnotation {
public String value();
}
の作業注釈:
Consumer<String> consumer = new @MyTypeAnnotation("Hello ") Consumer<String>() {
@Override
public void accept(String str) {
System.out.println(str);
}
};
が現在のJava 8で動作しない、ラムダ式を注釈:
Consumer<String> myAnnotatedConsumer = @MyTypeAnnotation("Hello") (p -> System.out.println(p));
これら2つの構文の重要な違いの1つは、匿名クラスが依然としてクラスの宣言であることです。ラムダ式は新しいクラスを作成しません(またはそれが実装の詳細である場合は必ずしもそうではありません)。注釈は*宣言*にのみ許可されているという印象があります。注釈は*表現*に許可されていますか? – Lii