在java中是否有任何方法可以将包的可见性限制为仅包含其他包

时间:2015-11-29 18:40:16

标签: java class packages

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

2 个答案:

答案 0 :(得分:1)

在Java< 9 no中,无法在模块中将包设为私有。这个缺点正在Java 9中用模块系统解决。

答案 1 :(得分:0)

Java中有四个访问修饰符。明显的publicprivate,然后protectedpackage-private。受保护是针对同一个包和子类中的类,而package private(没有明确声明的修饰符)仅适用于包。所以 - 不,你只能通过访问修饰符做你所要求的。

这给你留下了几个选择。

A)一旦我开始听到"实用程序类",它就会开始听起来像你的API设计中存在问题,而不是实现。公共可访问的类有什么问题?听起来你正试图隐藏一些混乱或混乱的设计。

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

C)让您的实用程序类通过具有包私有构造函数的对象进行通信 - 并在您的" work"包。这样,没有其他包可以构造使用实用程序所必需的对象。

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

我的选择是目前为止A)。对于实用程序类,使用干净的公共API绝对没有任何错误。 JDK中有10,000个公共类。听起来你有点过分关注的是什么而不是什么?