когда объявляют окончательный экземпляр, почему я должен его инициализировать? - PullRequest
0 голосов
/ 04 февраля 2020

Я получаю ошибку Возможно, переменная "type" не инициализирована для следующего кода:

public class Ingredient {

    private final String  id;
    private final String name;
    private final Type type;

    public static enum Type {
        WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE
    }

    ... 

}

Может кто-нибудь объяснить, почему?

1 Ответ

1 голос
/ 04 февраля 2020

final указывает на создание константы, то есть переменной, значение которой не будет изменено, то есть слово final. GeeksForGeeks имеет хорошую статью на эту тему. Цитирование:

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

Если вы не инициализируете переменную final, не имеет смысла иметь ее вообще, так как вы не сможете изменить его из неинициализированного состояния.

...