如何使 Java 类只能在同一个库中访问(在 Java 8 中)

pet*_*nce 6 java

将下面的示例视为我的类库项目,我需要使CommonClass同一项目中的所有其他类(A、B 和 C)可访问,但不可访问(当其他项目使用该库时),其中CommonClass包含通用方法而在我的媒体库中使用的所有其他类领域,在C#这是通过使用该解决internal的访问修饰符CommonClass。这甚至可以使用Java吗?

在此处输入图片说明

Jac*_* G. 7

这是Java 9 模块系统的绝佳用例。有了它,您可以导出除 之外的所有包com.test.pac4,禁止依赖于您的库的任何项目访问该包中的任何类(除非您的用户通过 覆盖它--add-exports)。

为此,您可以module-info.java在源目录中创建一个包含以下内容的文件(我建议更改模块名称):

module com.test.project {
    exports com.test.pac1;
    exports com.test.pac2;
    exports com.test.pac3;
}
Run Code Online (Sandbox Code Playgroud)

您还需要requires用于项目依赖的任何模块(请参阅:Java 9 Modularity)。


如果您使用的是 Java 8 或更低版本,则上述解决方案是不可能的,因为模块系统是在 Java 9 中引入的。

Java 8 的一种解决方法是修改您的项目层次结构;您可以将访问的每个类移动CommonClass到单个包中,然后将CommonClass包设为私有。这将阻止您图书馆的用户访问CommonClass.

  • @peterbence 这很不幸。Java 8 的解决方案是将所有类移至单个包中,并使“CommonClass”包私有。 (3认同)