带有/ * package * / suffix的Java包私有可见性成员

时间:2015-06-19 16:47:07

标签: java android

即使这是我经常找不到的东西,在成员之前评论/ *包* /的原因是什么?

 /* package */ final void attach(Context context) {
    attachBaseContext(context);
    mLoadedApk = ContextImpl.getImpl(context).mPackageInfo;
}

这是AOSP第180行的一个例子: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/app/Application.java

2 个答案:

答案 0 :(得分:3)

作为评论,它对编译器完全没有影响。但是,人类可以使用它来清楚地表明成员(方法或字段)或类是包私有的。

答案 1 :(得分:2)

默认情况下,Java中的成员使用包级访问 - 它们可以由同一包中的其他类访问,但不能由其他包中的类访问。

实际上使用此功能是相当罕见的,因为您通常希望所有变量都是私有的(或受保护的),并且您的方法要么是私有的(供自用),受保护的,要么是公共的。

没有明确的“包”修饰符,因此没有简单的方法可以一目了然地知道修饰符是否因为作者忘记包含正确的修饰符,或者因为他们故意希望成员具有包级访问权限

这就是为什么,在您想要使用包的极少数情况下,最好在方法声明前放置/ *包* /注释,以明确说明您有意使用此访问级别,而不是而不是意外忘记指定一个。

就编译器而言,注释本身实际上并没有做任何事情 - 它只是使代码更容易理解。