完全可以創建自己的只讀類,下面是個簡單的例子:
//: 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類的設計,它能保證對象不被改動。