注释匿名内部类

时间:2010-06-11 09:07:18

标签: java annotations

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

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

public void method1() {
  add(new Class2() {
    public void method3() {}
  });
}

3 个答案:

答案 0 :(得分:35)

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

答案 1 :(得分:11)

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

答案 2 :(得分:7)

是的,as mentioned by yegor256,这是可能的,因为JDK 8 adopted JSR 308 (type annotations)

因此,只要注释由@Target({ElementType.TYPE_USE})修饰,它就可以用于在运行时注释匿名类。例如:

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

Object o = new @MyAnnotation("Hello") Object() {};

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

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