建设java只读类
完全可以建设本身的只读类,下面是个简朴的例子:
//: Immutable1.java
// Objects that cannot be modified
// are immune to aliasing.
public class Immutable1 {
private int data;
public Immutable1(int initVal) {
data = initVal;
}
public int read() { return data; }
public boolean nonzero() { return data != 0; }
public Immutable1 quadruple() {
return new Immutable1(data * 4);
}
static void f(Immutable1 i1) {
Immutable1 quad = i1.quadruple();
System.out.println("i1 = " + i1.read());
System.out.println("quad = " + quad.read());
}
public static void main(String[] args) {
Immutable1 x = new Immutable1(47);
System.out.println("x = " + x.read());
f(x);
System.out.println("x = " + x.read());
}
} ///:~
所有数据都设为private,可以看到没有任何public要领对数据作出修改。事实上,确实需要修改一个工具的要领是quadruple(),但它的浸染是新建一个Immutable1工具,初始工具则是原封未动的。
要领f()需要取得一个Immutable1工具,并对其采纳差异的操纵,而main()的输出显示出没有对x作任何修改。因此,x工具可别名处理惩罚很多次,不会造成任何伤害,因为按照Immutable1类的设计,它能担保工具不被窜改。