首页 > 解决方案 > 如何使 Java 类只能在同一个库中访问(在 Java 8 中)

问题描述

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

在此处输入图像描述

标签: java

解决方案


这是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;
}

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


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

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


推荐阅读