美文网首页
Effective Java - 使类和成员的可访问性最小化

Effective Java - 使类和成员的可访问性最小化

作者: DZQANN | 来源:发表于2022-05-19 22:30 被阅读0次

    第15条 是类和成员的可访问性最小化

    1. 设置访问级别的规则:尽可能的使每个类或者成员不被外界访问
    2. 对于顶层(非嵌套)的类和接口,只有两种可能的访问级别:包级私有(package private)和公有(public)。
    3. 如果一个包级私有的顶层类(或接口)只是在某一个类的内部被用到, 就应该考虑使它成为那个类的私有嵌套类.
    4. 如果覆盖了超类中的一个方法, 子类中的访问级别就不允许低于超类中的访问级别.
    5. 为了测试将一个公有类的私有成员编程包级私有是可以接受的,但是不能再超过包级私有的访问限制了
    6. 公有类的实例域绝不能是共有的,包含公有可变域的类通常并不是线程安全的
    7. 用final符修饰的内容,如果知识可变对象的引用,则比较危险,比如数组、List等。可以暴露Immutable的List,或者使用方法,每次返回一个clone实例。

    这一节讲的内容相对比较抽象,简单说一下开发过程中碰到的例子以及自己的一些理解:

    • 其实protected是我们比较少使用的访问级别。我自己在开发过程中,只有抽出来了abstract抽象类,暴露给外面的方法是public,而抽象方法是只是一个辅助功能的时候,才会把抽象方法做成protected,也算是模板方法模式
    • 我们在真正的开发过程中,包的概念其实更像是一种分类,创建class的时候,应该属于哪种分类,就会放到哪个package中,但是一个package中的不同class很少有联系。而作者这里更倾向于让每一个package是一个整体,其中有一部分public的类对方暴露功能,其它的类负责打辅助。这种设计确实是我们在系统开发中很少会碰到使用的
    • 理论上来说,每个类最好都有自己的对外的行为,而不是简单的get、set自己的内容(VO、DTO)。Java14引入了record类型,可能就是出于这种目的。仅仅是传输内容的对象,就使用record就好了,还帮助我们写了get、set、equals等等。我们自己写的有逻辑的内容再用class
    • 如果在开发过程中,需要我们放大内容的访问级别,这时候就要停下来思考一下,是不是哪里有不合理的地方,按道理来说应该是可以避免的。比如之前碰到的例子,类A(public)依赖类B(protected),在其它地方创建类A的时候必须先创建类B,但是因为访问不到,只能将B变成public。后来仔细想想,其实是可以把B放到A里变成内部类的,就是这里说的第3点内容

    相关文章

      网友评论

          本文标题:Effective Java - 使类和成员的可访问性最小化

          本文链接:https://www.haomeiwen.com/subject/vcsqprtx.html