此代码有效吗?
public abstract class A {
protected static final String c = "my const";
}
@myAnnotation(value=A.c)
public class B extends A {
}
JDK 1.6.0.23 的 Eclipse
接受此操作,但是 JDK 1.6.0.23 的 Maven
2.2.1 显示以下编译错误:
c 在 A 中具有受保护的访问权限
value=c.A
时,几乎就像向注释添加静态初始化程序一样。该注释不是 A 的子类,因此访问被拒绝。受保护的访问包括包访问,因此当您将 A 移至与 B 相同的包中时,注释也与 A 位于同一包中。它会获得访问权限。非常好的问题,我认为两个编译器的行为应该是相同的。我认为 Eclipse 会让您自定义它视为错误的内容,这样您就可以让他们同意都使用不良的、更具限制性的行为。
A
和
B
属于同一个包时,此代码才会编译。