Java中包私有类的优缺点?

zw3*_*324 62 java default class modifier package-private

我最近在学习Java,我遇到了package-private类的概念,如果我们没有指定任何东西,这是默认的.但后来我意识到:

  1. 我很少看到使用package-private类.是否有这样的原因,例如,它有严重的缺点,它是多余的,或者只是我阅读不够?是否有强烈的论据支持/反对其使用?

  2. 如果它在大多数情况下确实没用,为什么它会是默认值?

  3. 在什么情况下我们应该在现实世界中使用package-private?即,什么时候会变得不可替代?

换句话说,默认的package-private修饰符的主要优点和缺点是什么?

And*_*yle 54

简短的回答是 - 这是一种稍微宽泛的私人形式.

我假设你熟悉的区别publicprivate,以及为什么它通常是很好的做法,使方法和变量private,如果他们要单独用于内部问题的类.

好吧,作为对此的扩展 - 如果您正在考虑以模块化方式创建软件,您可能会想到一个模块的公共接口,它将在其中有多个类在它们之间进行协作.在这种情况下,public如果方法将被消费者调用,那么制作方法是完全合理的; private如果他们是班级内部的; 而package private如果他们使用这个模块中的类之间的调用,也就是说,它是你的模块的实现细节(公共呼叫者可以看到),但跨越几类.

这在实践中很少使用,因为包装系统对于这种事情并没有那么有用.您必须将给定模块的所有类转储到完全相同的包中,对于任何非平凡的包都会变得有点笨拙.所以这个想法很棒 - 只需要一些"附近"的类就可以访问一个方法,只是稍微宽一些private- 但是对你如何定义这组类的限制意味着它很少使用/有用.


小智 14

package-private的一个好处是你可以使用它来访问你认为私有的单元测试类的方法.当然,缺点是包中的其他类可以在它们真的不应该调用时调用它.


ass*_*ias 5

除了封装之外,使用package-private类的主要优点之一是它们不会出现在项目的javadoc中。因此,如果您使用了一些没有其他用途的帮助程序类,而是为了帮助您的公共类完成客户端需要做的事情,那么有必要将它们打包为私有,这是很有意义的,因为您希望使库用户尽可能简单。

例如,您可以看一下我开发的库。所述的Javadoc仅包含5个接口和12个类虽然源代码具有更大量。但是隐藏的大部分是内部层,这些内部层不为客户端提供任何增值(通常所有抽象基类都是隐藏的)。

JDK中也有很多示例。