it-roy-ru.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++; выдаст ошибку. За Oracle,

Окончательная переменная может быть назначена только один раз. Объявление переменной final может служить полезной документацией, что ее значение не изменится и поможет избежать ошибок программирования.

Вы можете следовать этой статье здесь . Глядя на ваш код, кажется, что вы действительно не хотите, чтобы count был окончательным. Вы хотите иметь возможность изменять его значение на протяжении всей программы. Исправление будет заключаться в удалении модификатора final.

10
Michael

Когда вы объявляете переменную final, вы в основном сообщаете компилятору, что эта переменная является константой и НЕ изменится. Вы объявили count final, но еще не инициализировали (не установили значение). Вот почему вам было разрешено установить его значение в конструкторе public List() {}: конечные переменные можно инициализировать один раз, а после этого их нельзя изменять.

Есть исключения из этого, хотя, если вы, например, создали объект со значением int, равным count, и добавили установщик, вы все равно сможете изменить конечный объект.

Пример этого:

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
    }
}
3
nbokmans

Это выдает ошибку, потому что вы объявили count как конечную переменную. Конечные переменные - это не что иное, как константы. Мы не можем изменить значение конечной переменной после ее инициализации.

1
light

Ключевое слово 'final' работает как константа. Вы можете назначить значение тогда и там в заявлении или вы можете назначить значение в конструкторе, но это тоже только один раз. Вы не можете увеличить его значение дальше по коду. Поэтому count ++ сгенерирует ошибку.

Также знайте, что 'final' при использовании с классами или функциями предотвращает их наследование в подкласс.

0
Tanzeel