Почему не могут быть защищены или публиковаться в Java?
Весь вопрос в названии. Например:
enum enumTest {
TYPE1(4.5, "string1"), TYPE2(2.79, "string2");
double num;
String st;
enumTest(double num, String st) {
this.num = num;
this.st = st;
}
}
Конструктор в порядке с модификатором по умолчанию или private
, но дает мне ошибку компилятора, если заданы модификаторы public
или protected
.
Ответы
Ответ 1
Подумайте об Enums как классе с конечным числом экземпляров. Никогда не может быть никаких разных экземпляров рядом с теми, которые вы изначально объявляете.
Таким образом, у вас не может быть открытого или защищенного конструктора, поскольку это позволит создавать больше экземпляров.
Примечание: это, вероятно, не официальная причина. Но для меня имеет смысл рассуждать о enums
таким образом.
Ответ 2
Потому что вы не можете вызвать конструктор самостоятельно.
Вот что пособия на Enums должны сказать:
Примечание. Конструктор для типа перечисления должен быть закрытым или закрытым. Он автоматически создает константы, которые определены в начале тела перечисления. Вы не можете вызвать конструктор перечисления самостоятельно.
Ответ 3
Перечисления содержат фиксированный набор значений, которые должны быть известны во время компиляции. Не имеет смысла создавать новые литералы во время выполнения, что было бы возможно, если конструктор был виден.
Ответ 4
Ключевым моментом, который следует помнить, является то, что перечисления, не входящие в класс, могут быть объявлены только с помощью модификатора public или по умолчанию, как и не внутренний класс.
Ответ 5
если вы хотите объявить enum
public, затем сохраните файл enum
с именем enum
.
Предположим, вы сделали enum Book{}
, затем сохраните его Book.java
и сделайте отдельный файл для класса
это единственный способ объявить enum
public.