java - 如何使 Java 类只能在同一个库中访问(在 Java 8 中)
问题描述
将下面的示例视为我的类库项目,我需要使CommonClass
同一项目中的所有其他类(A、B 和 C)都可以访问,但世界无法访问(当其他项目使用该库时),其中CommonClass
包含常用方法和我的库中所有其他类使用的字段,在C#中,这是通过使用internal
访问修饰符 on解决的CommonClass
。这甚至可以使用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
.
推荐阅读
- python - 猜谜游戏isdigit帮助python
- php - 移除特定的 URL 参数
- angular - Firefox 中的 Twilio 视频大小调整
- python - 如何在 Tensorflow 中进行联合推理
- laravel - Laravel 铸造指数浮动不起作用
- java - Java Socket连接在没有调用关闭连接的情况下关闭
- api - Laravel API 输出中的包装器
- swift - 验证来自 macOS 应用扩展的收据?
- php - 无法使用 AJAX 接收 PHP 对象
- django - Django Rest Framework 在创建 django 用户时创建用户配置文件