【发布时间】:2017-06-20 07:46:39
【问题描述】:
This question 现在已经超过 3 年了,专门针对 Java 8,接受的答案也引用了 Java SE 8 Final Specification。
如果有关此问题的某些内容在 Java 9 中会发生变化,我会很感兴趣:是否有任何方法可以注释 lambda 表达式,类似于注释相应的匿名类?
示例:
注释:
@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));
【问题讨论】:
-
这两个结构之间的一个重要区别是匿名类仍然是类的声明。一个 lambda 表达式不会创建一个新类(或者不一定,如果它是一个实现细节)。我的印象是注释只允许在声明上。 表达式上是否允许使用注释?
标签: java lambda annotations java-9