Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 注释匿名内部类_Java_Annotations - Fatal编程技术网

Java 注释匿名内部类

Java 注释匿名内部类,java,annotations,Java,Annotations,有没有一种在Java中注释匿名内部类的方法 在本例中,您可以向Class2添加类级注释吗 public void method1() { add(new Class2() { public void method3() {} }); } 不,你需要把它提升到一个“合适”的班级。如果有必要,它仍然可以在外部类中确定作用域,因此它不需要是顶级类、公共类或其他类型。但是它确实需要一个合适的类定义来附加注释。还没有。此功能由建议,并可能包含在Java的未来版本中。是的,这是可能的,因为

有没有一种在Java中注释匿名内部类的方法

在本例中,您可以向Class2添加类级注释吗

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

不,你需要把它提升到一个“合适”的班级。如果有必要,它仍然可以在外部类中确定作用域,因此它不需要是顶级类、公共类或其他类型。但是它确实需要一个合适的类定义来附加注释。

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

是的,这是可能的,因为

因此,每当注释被
@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()));   
Class c=o.getClass();
AnnotatedType type=c.getAnnotatedSuperclass();
System.out.println(Arrays.toString(type.getAnnotations());

甚至可以在方法中定义“适当”类,这样它的作用域对于方法来说是局部的,并且在设计上它仍然是方法的内部实现细节。如果你对@amichear对局部类的描述感到惊讶(就像我一样)请注意,这是JDK8的新特性,文档在这里:显然,自Java1.1以来,本地类就已经存在了。。。但它们仍然令人惊讶:-)注意,由于Java 8,您也可以向匿名类添加类级注释,请参见。您可能需要添加明确的“否”。否则,您的答案会导致心理页面错误。是否有关于如何访问此类注释的文档?我找不到使用
o.getClass().getAnnotatedSuperclass().getAnnotations()
访问它们所需的官方文档,这对我来说似乎很奇怪,而且违反直觉