1.介绍
java中的不可变类更容易设计、实现和使用。不容易出错,且更加安全。
2.如何设计不可变类
- 不要提供任何修改对象状态的方法。
- 保证类不会被扩展。使用final修饰class
- 使所有的域都为final
- 所有的域都为私有的。
- 确保对任何可变组件的互斥访问。(如果类具有指向可变对象的域,必须确保客户端的类不能访问到此类)。
3.举例(Guava ImmutableDoubleArray)
@Beta
@GwtCompatible
@Immutable
public final class ImmutableDoubleArray implements Serializable {
private static final ImmutableDoubleArray EMPTY = new ImmutableDoubleArray(new double[0]);
/** Returns the empty array. */
public static ImmutableDoubleArray of() {
return EMPTY;
}
/** Returns an immutable array containing a single value. */
public static ImmutableDoubleArray of(double e0) {
return new ImmutableDoubleArray(new double[] {e0});
}
/** Returns an immutable array containing the given values, in order. */
public static ImmutableDoubleArray of(double e0, double e1) {
return new ImmutableDoubleArray(new double[] {e0, e1});
}
/** Returns an immutable array containing the given values, in order. */
public static ImmutableDoubleArray of(double e0, double e1, double e2) {
return new ImmutableDoubleArray(new double[] {e0, e1, e2});
}
...
}