私有嵌套类的可访问性

时间:2011-09-18 22:21:51

标签: java eclipse javac

我有一个像

这样的课程
@SomeAnnotation(Outer.Inner.class)
enum Outer {
    A, B, C;
    private static class Inner {...}
}

在Eclipse中运行良好,但javac抱怨私有访问。哪个编译器是对的?

据我所知,只要访问发生在同一个源文件中,所有访问限制都会被忽略。

2 个答案:

答案 0 :(得分:0)

我记得一些模糊的安全事件是由同一源文件中的所有工作机制产生的。

完全有可能它不再适用于较新版本的java。

答案 1 :(得分:0)

类声明中的可访问性与类中的可访问性不同 - 声明中的符号不​​能引用私有成员。这是因为声明给出的信息必须至少可用于包的其余部分。

例如,考虑一个包私有类Outer

class Outer<T extends Outer.Inner> {

   private static class Inner { }
}

上述内容无效,因为该软件包的其他成员无法访问Inner,即使他们必须能够通过其声明访问Outer并知道它是什么。类似的逻辑可以应用于您的情况。

我不确定为什么Eclipse允许它,但我会说javac是正确的,NetBeans似乎同意。