effective java(15) 之使可变性最小化
2017-10-18 21:15
316 查看
effective java 之使可变性最小化
1、不可变类是实例不能被修改的类。每个实例中包含的所有信息都必须在创建该实例的时候就提供,并在对象的整个生命周期内固定不变。
例如String、BigInteger和BigDecimal类。不可变类更易于设计、实现和使用。
2、设计不可变类的原则:
1:不要提供任何修改对象状态的方法。(setter方法)
2:保证类不会被扩展,用final修饰类或者是私有化构造器提供公有静态工厂方法。
3:使所有域都是final的
4:使所有的域都是私有的
5:确保对于任何可变组件的互斥访问
3、不可变对象本质上是线程安全的,它们不要求同步。所以,不可变对象可以被自由的共享。
4、使类成为不可子类化的另一种方法是将类的构造函数私有化,然后提供静态工厂来产生对象。
5、总之,坚决不要为每个get方法编写一个相应的set方法。除非有很好的理由也要让类成为可变的类,否则就应该是不可变的。
对于有些类而言,其不可变性是不切实际的。如果类不能被做成是不可变的,仍然应该是尽可能地限制它的可变性。
降低对象可以存在的状态数,可以更容易地分析该对象的行为,同时降低出错的可能性。
因此,除非有令人信服的理由要使域变成是非final的,否则要使每个域都是final的。
想要了解更多不变类信息,请查看不变模式那节,有详细的介绍。
每天努力一点,每天都在进步。
1、不可变类是实例不能被修改的类。每个实例中包含的所有信息都必须在创建该实例的时候就提供,并在对象的整个生命周期内固定不变。
例如String、BigInteger和BigDecimal类。不可变类更易于设计、实现和使用。
2、设计不可变类的原则:
1:不要提供任何修改对象状态的方法。(setter方法)
2:保证类不会被扩展,用final修饰类或者是私有化构造器提供公有静态工厂方法。
3:使所有域都是final的
4:使所有的域都是私有的
5:确保对于任何可变组件的互斥访问
3、不可变对象本质上是线程安全的,它们不要求同步。所以,不可变对象可以被自由的共享。
4、使类成为不可子类化的另一种方法是将类的构造函数私有化,然后提供静态工厂来产生对象。
public class Complex{ private final double re; private final double im; private Complex(double im, double re) { this.im = im; this.re = re; } public static Complex valueOf(double re,double im){ return new Complex(re,im); } }
5、总之,坚决不要为每个get方法编写一个相应的set方法。除非有很好的理由也要让类成为可变的类,否则就应该是不可变的。
对于有些类而言,其不可变性是不切实际的。如果类不能被做成是不可变的,仍然应该是尽可能地限制它的可变性。
降低对象可以存在的状态数,可以更容易地分析该对象的行为,同时降低出错的可能性。
因此,除非有令人信服的理由要使域变成是非final的,否则要使每个域都是final的。
想要了解更多不变类信息,请查看不变模式那节,有详细的介绍。
每天努力一点,每天都在进步。
相关文章推荐
- Effective Java 读书笔记——15:使可变性最小化
- 【Effective Java】Ch4_Class:Item15_使可变性最小化
- Effective Java 第 15 条: 使可变性最小化
- Effective Java(使可变性最小化)
- Effective Java(使可变性最小化)
- Effective Java(使可变性最小化)
- Effective Java 第十五条:使可变性最小化
- Effective Java(使可变性最小化)
- Effective Java(使可变性最小化)
- Effective Java(使可变性最小化)
- Effective Java(使可变性最小化)
- 《Effective java》读书记录-第15条-使可变性最小化
- Effective Java 3rd 条目15 最小化类和成员的可访问性
- 15 使可变性最小化
- Effective Java(使可变性最小化)
- Effective Java(使可变性最小化)
- Effective Java(使可变性最小化)
- Effective Java 3rd 条目17 最小化可变性
- Effective Java(使可变性最小化)
- Effective Java(使可变性最小化)