注释匿名内部类

Mar*_*ope 32 java annotations

有没有办法在Java中注释匿名内部类?

在此示例中,您可以向Class2添加类级别注释吗?

public void method1() {
  add(new Class2() {
    public void method3() {}
  });
}
Run Code Online (Sandbox Code Playgroud)

dty*_*dty 35

不,你需要将它推广到"适当的"课程.如果需要,它仍然可以在外部类中作用域,因此它不需要是顶级类,公共类或其他类.但它确实需要一个适当的类定义来附加注释.

  • 甚至可以在方法中定义"正确"类,因此其范围是方法的本地范围,并且在设计方面它仍然是方法的内部实现细节. (3认同)

yeg*_*256 11

还没.此功能由JSR 308建议,并且可能包含在Java的未来版本中.

  • 您可能想要添加一个明确的"否".否则你的答案会导致心理页面错误. (7认同)

jan*_*pol 8

是的,正如yegor256所提到的那样,因为JDK 8采用了JSR 308(类型注释).

所以现在每当注释被装饰时@Target({ElementType.TYPE_USE}),它都可以用于在运行时注释匿名类.例如:

@Target({ ElementType.TYPE_USE })
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
    String value();
}

Object o = new @MyAnnotation("Hello") Object() {};
Run Code Online (Sandbox Code Playgroud)

棘手的部分是如何访问注释:

    Class<?> c = o.getClass();
    AnnotatedType type = c.getAnnotatedSuperclass();
    System.out.println(Arrays.toString(type.getAnnotations()));   
Run Code Online (Sandbox Code Playgroud)