3

コンストラクターで設定された後、何も変更されないようにしたいクラスのメンバー変数があります。したがって、次のようになります。

public class MyClass
{
    private String myVar = null;

    public MyClass(DataObj dataObj)
    {
        myVar = dataObj.getFinalVarValue();
        //at this point I don't want anything to be able change the value of myVar
    }

    ....
}

私が最初に考えたのは、final修飾子を変数に追加するだけでよいということでしたが、コンパイラは、値を final フィールドに代入することについて不平を言います。これを達成することは可能ですか?

4

3 に答える 3

14

コンパイラは(コンストラクターで)不平を言います。これは、書き込みによって既に初期化を提供しているためです。

private String myVar = null;

= null「 」の部分を削除します。コンストラクターで値を追加finalして割り当てます。

public class MyClass
{
    private final String myVar;

    public MyClass(DataObj dataObj)
    {
        myVar = dataObj.getFinalVarValue(); // the only assignment/init happens here.
    }

    ....
}
于 2012-06-20T14:58:54.090 に答える
1

privateにしてから、セッターを含めないでください。クラスメソッド内で変更しない限り、不変です。

于 2012-06-20T14:56:18.237 に答える
-1

文字列オブジェクトはすでに不変です。したがって、private final修飾子を追加するだけで十分です。

于 2012-06-20T15:00:27.400 に答える