我正在清理代码并更改对静态成员的所有访问权限,以便它们由定义它们的类限定。然而,这导致了以下困扰我的问题。
我有一个带有嵌套类的类。在这个嵌套类的注释中,我引用了周围类中的私有静态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;
}
在这两种情况下,变量都指向同一个字段,为什么会发生这种情况呢?
答案 0 :(得分:4)
这对1.8.0_25和1.7.0_45 public static <Z, T> List<T> mapList(Mapper mapper, List<Z> source, Class<T> type) {
List<T> result = new ArrayList<T>();
int listSize = source.size();
for (int i=0;i<listSize;i++) {
result.add(mapper.map(source.get(i), type));
}
return result;
}
编译很好,因为它应该是真的。 或者两者都应该失败,这也是一致的。
这似乎是Eclipse注释处理中的一个错误(这就是为什么你可以愉快地从普通代码中引用相同的常量),很久以前它是reported但是还没有#39}过去4年里,有很多活动。
答案 1 :(得分:-2)
请参阅How to supply value to an annotation from a Constant java。
基本上你不能。注释值必须是基元或字符串。您无法引用字段,私有字段或其他字段。