我正在研究 Joshua Bloch 的 Effective Java,他解释了实现不可变类的不同方法。为了防止子类化,一种方法是使用final。更复杂的方法是将构造函数设为私有,从而防止外部访问,并使用静态工厂创建对象。
但是,我不明白这个说法:
public class Complex {
private final double re;
private final double im;
private Complex(double re, double im) {
this.re = re;
this.im = im;
}
public static Complex valueOf(double re, double im) {
return new Complex(re, im);
}
}
它是最灵活的,因为它允许使用多个包私有实现类。
我知道在没有公共/受保护的构造函数的情况下,外部客户端不可能对其进行子类化,但不理解术语“多包私有实现类”所传达的内容。
注意:这是有效 Java 中的第 15 条(最小化可变性)。