创建java只读类2007-05-29 yycnet.yeah.net yyc译完全可以创建自己的只读类,下面是个简单的例子:
//: 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类的设计,它能保证对象不被改动。