为什么应避免使用Java中的package-private范围

最近,我在我的项目中讨论了关于包私有的可见性修改器。

“等等,什么是包私有在Java中?”有时也称为默认要么没有修饰符。 This is when class要么method doesn't have any modifier。 For example:

class SomeObject {
  void doSomething() {
    ...
  }
}

There are more details in Java tutorial.

除非非常具体的原因,否则不应该使用它。 您可以选择公开,私有或受保护。

到目前为止,我听到其他人的原因有很多:

  • 但是我需要它来测试对象中的方法!但是最好限制访问对象! 只有相同包装的类才能访问它。我的图书馆有很多用户,想对他们隐藏实现细节!

But I need it to test method in my object!

不要仅仅为了测试那个非常重要的方法而进行私有打包。 这是我观察到的常见谬论之一。 人们倾向于以某种方式访问​​该私有逻辑,只是稍微放松一下,然后进行肮脏的测试! 有一个更好的办法。 首先,您需要了解,如果存在一些难以测试的隐藏功能,则您的设计可能存在问题。 这意味着它是重构的理想选择! 只需使用定义良好的API方法将该逻辑提取到内部类中并进行测试即可。

But It's better to restrict access to the Object as much as possible! It's being accessed only by same-package classes.

Oracle官方文档说: 使用对特定成员有意义的最严格的访问级别。 Use private unless you have a good reason not to. I am totally agree with this statement, just if we will drop 包私有不在此列表中。 如果一切都是公共/私有的,那么对于您的项目而言,生活将变得更加轻松。 大型代码库中最常见的重构之一是移动文件/类。 有很多包私有访问它将立即变得烦人。 那为什么不公开它们呢? At the end both 上市和包私有公开您的类的API。 无论在哪种情况下,它都受程序包的限制,它仍然是您必须关注的API。

When it still makes sense

  • 测试。 不为测试代码编写访问修饰符是一种相对较新的趋势。 无论如何,修饰符都会给代码带来一些干扰,并且在测试中访问可见性与在生产代码中无关紧要。 少打字更好!您正在支持很多用户的图书馆。 除非您的库应与java8或更低版本兼容! 否则,我鼓励您在自己的库中使用JPMS(项目拼图),与之相比,这将使您更好地控制公开的API和内部实现包私有

因此,正如您在2019年(2020年很快!)所看到的,没有太多理由选择包私有能见度。

from: https://dev.to//cauchypeano/why-you-should-avoid-package-private-scope-in-java-anl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值