首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

建立 Java 唯讀類別:Immutable1 範例與別名免疫機制

     編輯:Java 相關知識

完全可自行建立唯讀類別。下例示範 Immutable1:

//: Immutable1.java
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()); // x 未被修改
    }
} ///:~

所有資料設為 private,無任何 public 方法修改資料。quadruple() 雖名為修改,實則建立新物件回傳,原物件原封未動。

f() 接收 Immutable1 並操作,main() 輸出證明 x 未變。因此 x 可被多重別名引用而無副作用——Immutable1 設計保證物件不被改動,從根本解決別名問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved