在我研究 Java API 的过程中,我遇到过 impl 包和内部包。到目前为止,我从未真正考虑过其中的区别 - 与所有企业级 Java 应用程序一样,我认为它们只是意味着“此处的实际实现;您(API 用户)应该真正使用该接口。走开。”
对 Stack Overflow 的一点挖掘似乎表明内部包至少可以有一些安全措施。
那么区别是什么呢?我不认为这是一个品味问题,因为我已经看到过两者都有的 API。
包名称对运行时行为没有任何影响。这只是一个品味问题。一些模块化系统(例如 OSGi)可以让您在清单文件中更严格地控制下游模块可见的内容与不可见的内容,但这一切都是显式完成的,而不是通过命名约定。至少在 OSGi 圈子里,“internal”是相对于“impl”的既定命名约定。从词法上来说,它比“impl”更通用,因此通过扩展可以更广泛地应用......模块外部的代码不应触及的所有内容。