簡體   English   中英

只有靜態成員的類是不可變的嗎?

[英]Is a class with only static members immutable?

只有靜態成員的類是不可變的嗎? 或接近於一成不變?

從技術上講,是的。

不變性的定義:

不可變是指一旦對象的構造函數完成執行,該實例將無法更改。

假設您有這個課程:

public class MyClass {
    public static int a = 0;
}

創建此類的實例時,您無法“更改”它,因為沒有任何更改可以更改其值! 沒有非靜態成員!

是的,這樣的類是不可變的。

如果這些字段都是final且是原始的或不可變的,則您具有不可變的類。 注意:僅將字段定為final不會使其不變。

// not immutable!
private static final Set<String> words = new HashSet<>();
public static void addWord(String word) { words.add(word); }

注意:關於不變的規則的一個例外是使用反射或本機方法。 反射/本機方法甚至可以嘗試覆蓋最終值。 一個使用的地方在java.lang.System

public final static PrintStream out = null;

因此,您可能會得出以下結論: System.out始終為null並且無法編寫Hello World程序,但是,哦,不,它是通過本機代碼來設置的,類似於此方法的操作方式

public static void setOut(PrintStream out) {
    checkIO();
    setOut0(out);
}
private static native void setOut0(PrintStream out);

所以實際上, System.out確實會在啟動時被JVM重置,您可以使用System.setOut重置它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM