在我的库中包含 "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 也有 sun
和 com.sun
包,它们是完全可以访问的,但每个人都知道你不应该在它们上面构建代码。
在一些流行的 API 中,我经常找到包名称 internal
,所以恕我直言,你没问题。
我正在设计一个库,虽然我知道我应该只 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 也有 sun
和 com.sun
包,它们是完全可以访问的,但每个人都知道你不应该在它们上面构建代码。
在一些流行的 API 中,我经常找到包名称 internal
,所以恕我直言,你没问题。