繁体   English   中英

我可以阻止包在 Java 中导入特定的其他包吗

[英]Can I prevent a package from importing specific other packages in Java

当代码都位于同一个 Java 项目中时,Java 或 eclipse(或 eclipse 插件)是否具有防止一个包命名空间使用另一个包命名空间的功能,而不管公共类的可见性如何?

例如包“myapp.model”可能永远不会从“myapp.fxview”导入

背景

我正在使用 Eclipse 使用 Java 中的“模型视图控制器”架构编写应用程序。

“myapp.model”包含纯Java代码,没有外部库或平台特定代码“myapp.fxview”包含覆盖JavaFX类的类

我想确保我的模型代码不会因为对视图代码的依赖而“受到污染”(例如,在我的模型中意外使用了来自“视图”实现的枚举),以便我可以在多个平台上使用我的模型(JavaFX PC 、Android、WebServer 后端)

我想将所有代码保存在一个项目中,以尽量减少处理项目/工作区设置问题的时间。 (我知道使用单独的项目很容易解决这个“问题”)

通过使用 Java 9 或更新版本中可用的模块系统。 有模块声明,例如“exports...to”或“opens...to”。 通过使用这些,您可以明确限制哪些包在何处可​​用。 为了支持这一点,更好地重组包名称以表示可能存在多个视图(myapp.fxview -> myapp.view.fx)。

这段未经测试的代码大致显示了它的外观

module modelmodule {
    exports myapp.model to myapp.view.fx;
    exports myapp.model to myapp.application;
}

module viewmodule {
    exports myapp.view.fx to myapp.application;
}

@see https://www.oracle.com/corporate/features/understanding-java-9-modules.html

感谢 Thomas 在评论中指出我正确的方向。 我一直在工作中使用 Java 8,因此在家里也坚持使用 Java 8。 因此,直到现在我才知道 Modules 系统。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM