2016-11-28 11 views

答えて

1

Techinically、はい。

Definition of immutability:

不変オブジェクトのコンストラクタは、インスタンスを変更することができない実行を完了することを意味します。

は、あなたがこのクラスを持っていると言う:

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

あなたは、このクラスのインスタンスを作成するときの値を変更するには、変更することは何もありませんので、あなたは、それを「変更」することはできません!非静的メンバーはありません!

だから、そのようなクラスは不変です。

+0

Upvote:あなたは私よりもはるかに優れています。 – Bathsheba

+1

はい、できますが、不変性はクラスのインスタンスメンバーとのみ関係あり、静的メンバーとは関係ありません。 MyClassはMyClassのインスタンスではありません。 @LoganKulinski – Sweeper

1

フィールドがすべてfinalで、プリミティブまたは不変の場合は、不変のクラスがあります。注:フィールドを最終的にするだけでは、それを不変にすることはできません。

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

注:不変の場合のこのルールの例外の1つは、リフレクションまたはネイティブメソッドの使用です。リフレクション/ネイティブメソッドは、最終的な値をオーバーライドしようとする可能性があります。これが使用されている場所の一つは、あなたはSystem.outは常にnullであり、あなたはHello Worldのプログラムを書くことはできませんが、ああ、いや、これは何と同様に、ネイティブコードから設定されますと結論づけるかもしれないjava.lang.System

public final static PrintStream out = null; 

でありますこの方法は、そう実際には、System.outは、起動時にJVMによって

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

リセットされますんん、あなたは何よりも近いSystem.setOut

関連する問題