我在嵌套类中的方法参数注释中遇到了一个奇怪的效果.看起来非常像编译器问题.有关重现的详细信息和步骤,请参见下文.
使用javac编译以下类(我使用了javac 1.7.0_51).请注意带注释的参数"boolean param3".
import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
public class TestAnnotations {
public String a;
@Retention(RetentionPolicy.CLASS)
@interface MyAnnotation {}
protected class TestInner {
public TestInner(String param1, Object param2,
@MyAnnotation boolean param3) {}
public void accessField() {
System.out.println(TestAnnotations.this.a);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后用javap检查嵌套类(即javap -p -v -c TestAnnotations $ TestInner.class).它的构造函数如下所示.
public test.TestAnnotations$TestInner(test.TestAnnotations, java.lang.String,
java.lang.Object, boolean);
flags: ACC_PUBLIC
Code:
stack=2, locals=5, args_size=5
0: aload_0
1: aload_1
2: putfield #1 // Field this$0:Ltest/TestAnnotations;
5: aload_0
6: invokespecial #2 // Method java/lang/Object."<init>":()V
9: return …Run Code Online (Sandbox Code Playgroud)