建设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类的设计,它能担保工具不被窜改。