在我的库中包含 "internal" 包对我来说是不好的做法吗?

Is it bad practice for me to include an "internal" package in my library?

我正在设计一个库,虽然我知道我应该只 public 我希望客户端访问的 class ,但我很难坚持这个最佳实践。据我了解,这是最佳做法。我决定在我的库中的一个包中放置一个名为 internal 的包来保存我打算成为包私有的 classes,但最终可能会成为 public.

包在 Java 中的工作方式似乎有缺陷,因为你不能做 class "parent-package-private",所以当涉及到这样的问题时真的有 "bad practice" ?

等Java9,事情就会明朗起来。新的 模块结构将允许 public 的限制 类 模块外的任何位置。

但请注意,即使到那时,访问权限也不是真正可执行的。通过正确使用反射,您可以访问任何东西,甚至是私有的(不确定,但我认为 Java 9 的模块不会通过反射提供访问权限)。

访问修饰符只是给用户的注释"don't rely on me, I may change"。如果无法使用访问修饰符,我认为以其他方式提供注释是完全可以的。即使 JDK 也有 suncom.sun 包,它们是完全可以访问的,但每个人都知道你不应该在它们上面构建代码。

在一些流行的 API 中,我经常找到包名称 internal,所以恕我直言,你没问题。