[英]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.