📜  为什么枚举类只能在Java中有私有构造函数?

📅  最后修改于: 2022-05-13 01:54:56.527000             🧑  作者: Mango

为什么枚举类只能在Java中有私有构造函数?

每个枚举常量都是静态的。如果我们想表示一个名为 constant 的组,那么我们应该选择 Enum。因此我们可以使用枚举名称访问它。

没有构造函数的枚举:

enum Day{
 SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;
}

带有构造函数的枚举:

enum Size {
 SMALL("The size is small."),
 MEDIUM("The size is medium."),
 LARGE("The size is large."),
 EXTRALARGE("The size is extra large.");
 
 private final String pizzaSize;
 // private enum constructor
 private Size(String pizzaSize) {
    this.pizzaSize = pizzaSize;
 }

 public String getSize() {
    return pizzaSize;
 }
}

为什么我们不能有一个公共枚举构造函数?

我们需要枚举构造函数是私有的,因为枚举定义了一组有限的值(SMALL、MEDIUM、LARGE)。如果构造函数是公开的,人们就有可能创造更多的价值。 (例如,无效/未声明的值,如 ANYSIZE、YOURSIZE 等)。

Java中的枚举包含固定的常量值。因此,没有理由拥有公共或受保护的构造函数,因为您无法创建枚举实例。另外,请注意内部枚举被转换为类。由于我们不能显式地创建枚举对象,因此我们不能直接调用枚举构造函数。

Java
enum PizzaSize {
  
   // enum constants calling the enum constructors 
   SMALL("The size is small."),
   MEDIUM("The size is medium."),
   LARGE("The size is large."),
   EXTRALARGE("The size is extra large.");
  
   private final String pizzaSize;
  
   // private enum constructor
   private PizzaSize(String pizzaSize) {
      this.pizzaSize = pizzaSize;
   }
  
   public String getSize() {
      return pizzaSize;
   }
}
  
class GFG {
   public static void main(String[] args) {
      PizzaSize size = PizzaSize.SMALL;
      System.out.println(size.getSize());
   }
}


输出
The size is small.