私有静态字段在被周围的类限定时是否可以从嵌套类中看到?

时间:2016-02-09 14:31:04

标签: 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;

}

在这两种情况下,变量都指向同一个字段,为什么会发生这种情况呢?

2 个答案:

答案 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

基本上你不能。注释值必须是基元或字符串。您无法引用字段,私有字段或其他字段。