Java中包私有类的优缺点?

2022-08-31 13:32:03

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

  1. 我很少看到使用包私有类。这有原因吗,例如,它有严重的缺点,它是多余的,或者只是我读得不够?是否有强有力的论据支持/反对使用它?

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

  3. 在什么情况下我们应该在现实世界中使用包私有?也就是说,它什么时候会变得不可替代?

换句话说,默认包私有修饰符的主要优缺点是什么?


答案 1

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

我假设您熟悉 和 之间的区别,以及为什么如果方法和变量将仅在内部用于所讨论的类,那么通常最好使用它们。publicprivateprivate

好吧,作为对此的扩展 - 如果您正在考虑以模块化方式创建软件,则可以考虑使用模块的公共接口,该接口内部将有多个类相互协作。在这种情况下,如果它们将被消费者调用,那么制作方法是完全有意义的; 如果它们是类的内部;如果它们用于在此模块中的类之间调用,即它是模块的实现细节(如公共调用者所见),但跨越多个类。publicprivatepackage private

这在实践中很少使用,因为事实证明包系统对这种事情并不那么有用。你必须将给定模块的所有类转储到完全相同的包中,对于任何非平凡的东西来说,这都会变得有点笨拙。所以这个想法很棒-使一个方法可以被少数几个“附近”类访问,作为一个稍微宽一点的方法-但是对如何定义该类集的限制意味着它很少使用/有用。private


答案 2

关于包私有的一个好处是,您可以使用它来访问您原本认为是私有于单元测试类的方法。当然,缺点是包中的其他类可以在实际上不应该调用它的时候调用它。