Какая разница, когда я делаю конструктор enum приватным или дефолтным? - PullRequest
3 голосов
/ 20 сентября 2019

У меня есть класс enum, как показано ниже:

public enum TargetingName {

CONTENT("Content", "Content Targeting"), TECHNOLOGY("Technology", "Technology Targeting");

private TargetingName(String textToSelect, String textDisplayed) {
        this.textToSelect = textToSelect;
        this.textDisplayed = textDisplayed;
    }

    private String textToSelect;
    private String textDisplayed;

    public String getTextDisplayed() {
        return textDisplayed;
    }

    public String getTextToSelect() {
        return textToSelect;
    }
}

Если я не пишу private в конструкторе enum, это делает его стандартным?Если да, какая разница?Если нет, то как сделать конструктор по умолчанию?

Ответы [ 2 ]

8 голосов
/ 20 сентября 2019

8.9.2.Объявления тела Enum

В объявлении enum объявление конструктора без модификаторов доступа является закрытым.

Это не будет иметь никакого значения, если вам не понадобитсячтобы написать дополнительное слово.

Я видел, как разработчики ставили private, чтобы сделать его более явным (чтобы подчеркнуть тот факт, что вы не можете использовать конструктор enum вне enum).Я нахожу это ненужным.

Если я не пишу private в конструкторе enum, это делает его по умолчанию?

Если под "по умолчанию" вы имеете в виду private да.

Если по умолчанию вы имеете в виду package-private , no.Ни public, ни protected не допускаются.Конструкторы enum всегда private.

8.9.2.Объявления тела Enum

Ошибка времени компиляции, если объявление конструктора в объявлении enum является публичным или защищенным (§6.6).

6 голосов
/ 20 сентября 2019

Конструктор enum не может быть ничем иным, кроме private.

В объявлении enum объявление конструктора без модификаторов доступа является private.

...

Ошибка времени компиляции, если объявление конструктора в объявлении enum является публичным или защищенным.

Нет никаких оснований для того, чтобы оно было чем-то другим, кроме private: вы не можете создавать вручнуюновые экземпляры перечисления (это своего рода точка перечисления).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...