我正在开发一个最好由至少两个包组织的项目。例如,com.mycompany.core和com.mycompany.ui。 “核心”软件包希望将某些功能暴露给“ui”软件包,而不会将其暴露给外部世界。
例如,我在“core”包中有一个Point类,我允许我的“ui”包通过Point类的movePoint(int dx,int dy)方法移动一个点是有效的。 。但是,我不希望外界能够通过这种方法修改一个点。
这可以在没有任何复杂代码的情况下干净利落地完成吗?我意识到Java没有C ++的“朋友”语义,但我是否误解了一些关于Java的东西?
简而言之,即使我有两个与Java相关的“相关”软件包(“核心”和“ui”),就Java而言,它们也可能是完整的彼此陌生人?没有办法(没有复杂的代码)给“ui”包特别处理任何其他只使用我的“核心”和“ui”包的随机包?
感谢。
答案 0 :(得分:1)
基本上没有。当前Java中的每个包都是完全独立的,a.b.c与a.b.d没有特殊关系。因此,如果my.code.api可以访问my.code.internals,那么任何人都可以。
Java 9,通过项目拼图,正在添加一个名为模块的新构造来解决这个问题。或者您可以使用OSGI,它使用捆绑包产生相同的效果。