【问题标题】:Is there any way in java to limit a package's visibility to only some other packagejava中是否有任何方法可以将包的可见性限制为仅对其他包的可见性
【发布时间】:2015-11-29 18:40:16
【问题描述】:

我有 2 个包 > work 和 utils,utils 用于我需要在工作中的类中做的事情,类和工作方法是我想让运行这个 jar 的用户使用的那些,但我不希望他们访问 util 的类和方法。如果我将它们公开,用户将能够看到 util 中的所有方法,否则我将无法在“工作”中使用它们。如果我将它们放在一个包中,那么一个包中的类会太多,所以如果有解决方法请帮忙。我在这里也看到了类似的问题,但我没有找到任何答案,除了将这个记录给客户是我能找到的最好的。或者,如果有人可以为此提出更好的设计。

【问题讨论】:

  • 如果您不需要 util 包超出工作范围,那么将其作为工作包的一部分是有意义的。

标签: java class packages


【解决方案1】:

在 Java 中有四个访问修饰符。显而易见的publicprivate,然后是protectedpackage-private。 Protected 用于同一包中的类和子类,而包私有(未显式声明修饰符)仅用于包。所以 - 不,你不能只用访问修饰符做你所要求的。

这让您有几个选择。

A) 我一开始听到“实用程序类”,就开始觉得您的 API 设计可能存在问题,而不是实现。可公开访问的课程有什么问题?听起来您正试图隐藏一些混乱或令人困惑的设计。

B) 将您的“实用程序”函数捆绑到抽象基类中。这样具体实例可以继承功能,并利用protected

C) 让您的实用程序类通过具有包私有构造函数的对象进行通信 - 并在您的“工作”包中声明。这样,任何其他包都无法构造使用您的实用程序所需的对象。

D) 使用反射调用实用程序类的私有方法(很痛苦)。

到目前为止,我的选择是 A)。对于实用程序类来说,一个干净整洁的公共 API 绝对没有任何问题。 JDK 中有 10,000 个公共类。听起来您过于关注如何而不是什么?

【讨论】:

  • 'A' 似乎是迄今为止看到其他可用选项对我来说最公平的赌注。谢谢你的最后一句话真的很有帮助。
【解决方案2】:

在 Java

【讨论】:

    猜你喜欢
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    相关资源
    最近更新 更多