java 中是否有任何方法可以将包的可见性限制为仅对其他包可见
Is there any way in java to limit a package's visibility to only some other package
我有 2 个包 > 工作和实用程序,实用程序用于我在 类 工作中需要做的事情,类 和工作方法是我想提供的对于将 运行 这个 jar,但我不希望他们访问 类 和 util 方法的用户。如果我把它们设为public,用户将能够看到util中的所有方法,否则我将无法在'work'中使用它们。如果我将它们放在一个包中,那么一个包中会有太多 类,所以如果有解决方法,请帮忙。我在这里也看到了类似的问题,但我没有找到任何答案,除了将此记录给客户是我能找到的最好的答案。或者如果有人可以为此提出更好的设计。
在 Java <9 否,包不能在模块内设为私有。 Java 9 中使用模块系统解决了这个缺点。
您在 Java 中有四个访问修饰符。明显的 public
和 private
,然后是 protected
和 package-private
。 Protected 用于同一包中的 类,sub类,而包 private(未明确声明修饰符)仅用于包。所以 - 不,你不能只用访问修饰符来做你要求的事情。
这给您留下了几个选择。
A) 我一开始听到 "utility classes",就开始听起来您的 API 设计中可能存在问题,而不是实施中。 publically accessible 类 到底有什么问题?听起来您似乎在试图隐藏一些凌乱或令人困惑的设计。
B) 将您的 "utility" 函数捆绑到抽象基础 类 中。这样具体实例可以继承功能,并利用 protected
.
C) 让您的实用程序 类 通过具有包私有构造函数的对象进行通信 - 并在您的 "work" 包中声明。这样就没有其他包可以构建使用您的实用程序所必需的对象。
D) 使用反射调用实用程序上的私有方法 类(右痛)。
到目前为止我的选择是 A)。干净整洁 public API 实用程序 类 绝对没有任何问题。 JDK 中有 10,000 个 public 类。听起来你有点过于关注如何而不是什么?
我有 2 个包 > 工作和实用程序,实用程序用于我在 类 工作中需要做的事情,类 和工作方法是我想提供的对于将 运行 这个 jar,但我不希望他们访问 类 和 util 方法的用户。如果我把它们设为public,用户将能够看到util中的所有方法,否则我将无法在'work'中使用它们。如果我将它们放在一个包中,那么一个包中会有太多 类,所以如果有解决方法,请帮忙。我在这里也看到了类似的问题,但我没有找到任何答案,除了将此记录给客户是我能找到的最好的答案。或者如果有人可以为此提出更好的设计。
在 Java <9 否,包不能在模块内设为私有。 Java 9 中使用模块系统解决了这个缺点。
您在 Java 中有四个访问修饰符。明显的 public
和 private
,然后是 protected
和 package-private
。 Protected 用于同一包中的 类,sub类,而包 private(未明确声明修饰符)仅用于包。所以 - 不,你不能只用访问修饰符来做你要求的事情。
这给您留下了几个选择。
A) 我一开始听到 "utility classes",就开始听起来您的 API 设计中可能存在问题,而不是实施中。 publically accessible 类 到底有什么问题?听起来您似乎在试图隐藏一些凌乱或令人困惑的设计。
B) 将您的 "utility" 函数捆绑到抽象基础 类 中。这样具体实例可以继承功能,并利用 protected
.
C) 让您的实用程序 类 通过具有包私有构造函数的对象进行通信 - 并在您的 "work" 包中声明。这样就没有其他包可以构建使用您的实用程序所必需的对象。
D) 使用反射调用实用程序上的私有方法 类(右痛)。
到目前为止我的选择是 A)。干净整洁 public API 实用程序 类 绝对没有任何问题。 JDK 中有 10,000 个 public 类。听起来你有点过于关注如何而不是什么?