web-dev-qa-db-ja.com

エラー:最終変数に値を割り当てることができません

私は割り当てに取り組んでいますが、このエラーに固執しています:最終的な変数カウントに値を割り当てることができません

ここに私のコードがあります...

public class List
{
    private final int Max = 25;
    private final int count; 
    private Person list[];

    public List()
    {
        count = 0; 
        list = new Person[Max];
    }

    public void addSomeone(Person p)
    {
        if (count < Max){
            count++; // THIS IS WHERE THE ERROR OCCURS 
            list[count-1] = p;
        }
    }

    public String toString()
    {
        String report = "";

        for (int x=0; x < count; x++)
            report += list[x].toString() + "\n"; 

        return report;
    }
}  

私はJavaが初めてで、明らかにコンピューターの専門家ではないので、可能な限り簡単な言葉で問題/解決策を説明してください。ありがとうございました。

8
Kathryn

count++;はエラーをスローします。オラクルごとに、

最終変数は1回しか割り当てられません。変数finalを宣言することは、その値が変わらないことを示す有用なドキュメントとして役立ち、プログラミングエラーを回避するのに役立ちます。

その記事に沿ってフォローできます here 。コードを見ると、countを最終的にしたくないようです。プログラム全体でその値を変更できるようにする必要があります。修正は、final修飾子を削除することです。

10
Michael

変数finalを宣言すると、基本的にこの変数は定数であり、変更されないことをコンパイラーに伝えます。 count finalを宣言しましたが、まだ初期化(値を設定)していません。そのため、コンストラクターで値を設定することが許可されていましたpublic List() {}:最終変数は一度初期化でき、その後は変更できません。

ただし、これには例外があります。たとえば、countのint値を使用してオブジェクトを作成し、セッターを追加した場合でも、最終的なオブジェクトを変更できます。

その例:

public class ExampleObject {
    private int count;

    public ExampleObject(int count) {
        this.count = count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public int getCount() {
        return count;
    }
}

public class ExampleDemo {

    private static final ExampleObject obj = new ExampleObject(25);

    public static void main(String[] args) {
        obj = new ExampleObject(100); //not allowed: cannot assign a value to final variable
        obj.setCount(100); //allowed
    }
}
4
nbokmans

Countを最終変数として宣言したため、エラーがスローされます。最終的な変数は定数に他なりません。初期化された最終変数の値を変更することはできません。

1
Varun

「final」キーワードは定数として機能します。宣言時に値を割り当てたり、コンストラクタで値を割り当てたりすることができますが、それも一度だけです。コードのさらに下に値を含めることはできません。したがって、count ++はエラーを生成します。

また、クラスまたは関数で使用する場合、「最終」はサブクラスに継承されないことを知っています。

0
user10077799