Почему конструкторы enum не могут быть защищены или общедоступны в 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 модификаторы.

732   6  

6 ответов:

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

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

Примечание: это не официальная причина. Но это имеет наибольший смысл для меня, чтобы думать о enums этот путь.

потому что вы не можете вызвать конструктор себя.

здесь учебники по перечисления говорит:

Примечание: конструктор для типа перечисления должен быть package-private или private access. Он автоматически создает константы, определенные в начале тела перечисления. Вы не можете вызвать конструктор перечисления самостоятельно.

перечисления содержать фиксированный набор значений, которые должны быть известны во время компиляции. Нет смысла создавать новые литералы во время выполнения, что было бы возможно, если бы конструктор был виден.

ключевым моментом является то, что перечисления, которые не заключены в класс, могут быть объявлены только с помощью public или по умолчанию модификатор, как и не внутренний класс.

это потому, что перечисление Java содержит фиксированные постоянные значения. Таким образом, нет смысла иметь открытый или защищенный конструктор, поскольку вы не можете создать экземпляр перечисления.

кроме того, обратите внимание, что внутри перечисление преобразуется в класс, как показано ниже.

enum Color {
 RED, BLUE, YELLOW;
}

это будет внутренне преобразовано в:

public final class Color {
 private Color() {}
 public static final Color RED = new Color();
 public static final Color BLUE = new Color();
 public static final Color YELLOW = new Color();
}

если вы хотите объявить enum public затем сохранить enum файл с именем enum.

Предположим, вы делаете перечисление Book{} затем сохраните его как Book.java и сделать отдельный файл для класса

это единственный способ объявить enum общественности.

Comments

    Ничего не найдено.