8

final任意の瞬間に変数を作成することは可能ですか?最初の割り当てだけでなく、いつ不変になるかを決定したいと思います。

null割り当てとして数えられないのであれば、それは完璧でしょう。したがって、nullで初期化する場合でも、必ずしもコンストラクターにあるとは限らない、コードの後の最初の割り当てにワイルドカードがあります。

4

4 に答える 4

8

ここに記載されているように、変数を割り当てると、finalその値を変更することはできません。

最終変数は、初期化子または代入ステートメントのいずれかを介して、一度だけ初期化できます。宣言の時点で初期化する必要はありません。これは「空白のfinal」変数と呼ばれます。

特定の時点で不変にすることができる変数が必要な場合、実行できることは次のようになります。

...
private boolean isMutable;
private String someString;

public void setMutable(boolean value)
{
    this.isMutable = value;
}

public void setSomeString(String value)
{
    if (this.isMutable)
    {
        this.someString = value;
    }
}

...
于 2012-07-25T12:33:16.517 に答える
6

いいえ、あなたがすることはできません。あなたができることは、メソッドでカプセル化することです:

public boolean setValue(int i)
{
    if(isMutable)
    {
        value = i;
        return true;
    }
    return false;
}
于 2012-07-25T12:31:44.663 に答える
3

変数が宣言されているときに行う必要があるため、既に宣言されている変数を作成することはできませんfinal

于 2012-07-25T12:31:22.737 に答える