我的项目当前具有以下包结构。
这里我添加了一个包名称utils
,并在其中定义了与该模块相关的所有实用程序类。这些已被其他包(即 impl
、internal
)使用,因此我在 util
包中创建了类和方法公开
。
因为它是公共(public)的,不仅此模块中的类,其他模块中的类也可以访问它,当我使用 IDE 进行编码时,它们会显示为编码建议。
我查阅了几篇研究论文,这些论文描述了这会如何降低 API 的可用性,并给参与开发的开发人员带来糟糕的体验 [ref1 , ref2] .
我知道 java 不允许我使 util
中的类可供 impl
和内部包访问,而不能让其他人访问。
将我的实用程序类放入包“util”中是否正确?或者我应该将所有相互通信的类放在同一个包中?
最佳答案
你是对的,标记为public的东西可以在任何其他包中使用。与其他语言相比,Java 不提供除此之外的任何控制。
一个简单的解决方法:拥有一个特殊包可能会有所帮助,其中包含应可供外部用户使用的公共(public)内容。
含义:创建类似 com.whatever.product.api
的内容 - 并指示您的用户可以使用其中的所有内容 - 但不能使用其他内容。
换句话说:您将需要公开的所有内容公开;但您将这些东西收集在一个特殊的地方,并允许其他人使用。
值得一提的是,Java9将引入的概念modules ,这些允许您定义哪些包应该对模块的用户公开。从这个意义上说,java 9 模块允许您区分“内部”和“外部”公共(public)。
关于java - 控制 Java 中的类可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43119302/