通过 Java 包和 "project internal vs public" 函数的访问修饰符组织项目

Organizing project via Java packages and access modifiers for "project internal vs public" functions

我正在从事一个项目,该项目最好由至少两个包来组织。例如,com.mycompany.core 和 com.mycompany.ui。 "core" 包希望仅将某些功能公开给 "ui" 包,而不将其公开给外界。

例如,我在 "core" 包中有一个点 class,我可以高效地允许我的 "ui" 包通过 movePoint(int dx, int dy) 点的方法 class。但是,我不希望外界有能力通过这种方法修改一个点。

能不能不用任何复杂的代码就可以干净利落地完成?我意识到 Java 没有 C++ 的 "friend" 语义,但我对 Java 有什么误解吗?

简而言之,即使我在 Java 中有两个 "related" 包("core" 和 "ui")以上,就Java而言,他们还不如素不相识呢?没有办法(没有复杂的代码)对 "ui" 包给予特殊待遇,而不是任何其他仅使用我的 "core" 和 "ui" 包的随机包?

谢谢。

基本上没有。当前 Java 中的每个包都是完全独立的,a.b.c 与 a.b.d 没有特殊关系。因此,如果 my.code.api 可以访问 my.code.internals,那么任何人都可以。

Java 9,通过 jigsaw 项目,正在添加一个称为模块的新构造来解决此问题。或者您可以使用 OSGI,它使用捆绑来达到几乎相同的效果。