mis*_*ico 5 java annotations inner-classes
我正在清理代码并更改对静态成员的所有访问权限,以便它们由定义它们的类限定.然而,这导致了以下困扰我的问题.
我有一个带有嵌套类的类.在这个嵌套类的注释中,我引用了周围类中的私有静态final字段.当这样做没有资格时(如下面D类的注释),这是有效的.但是,在添加类限定符时(如在类C上的注释中),编译器会告诉字段(下面的v)不可见.
public class VisibilityTest {
@interface A {
int f();
}
@A(f = VisibilityTest.v) //fails
private static class C {
int c = VisibilityTest.v; //works
}
@A(f = v) //works
private static class D {
int d = VisibilityTest.v; //works
}
private final static int v = 5;
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,变量都指向同一个字段,为什么会发生这种情况呢?
这可以与 1.8.0_25 和 1.7.0_45 很好地编译javac,因为它确实应该如此。或者两者都应该失败,这也将是一致的。
这似乎是 Eclipse 注释处理中的一个错误(这就是为什么您可以愉快地从正常代码引用相同的常量),很久以前就报告了它,但在过去 4 年里没有太多活动。