首页 > 解决方案 > 为什么枚举不会导致无限递归?

问题描述

在 java 中,枚举声明如下:

enum Fruits{
BANANA,
ORANGE,
APPLE
}

在示例中,声明的枚举与类的类型相同。因此,当我创建枚举 Fruits 的实例时:

Fruits example = Fruits.ORANGE

这意味着创建了 enum fruits 的一个实例,然后继续为每个 enum 创建实例。鉴于水果中的每个枚举都是水果类型,因此它们会继续创建更多实例……依此类推,从而导致无限递归。我错过了什么吗?

标签: javaenums

解决方案


enum Fruits{
BANANA,
ORANGE,
APPLE
}

实际上与

class Fruits{
  static final Fruits BANANA = new Fruits("BANANA", 0);
  static final Fruits ORANGE = new Fruits("ORANGE", 1);
  static final Fruits APPLE = new Fruits("APPLE", 2);

  private Fruits(String name, int ordinal) {
    super(name, ordinal);
  }
}

有一点额外的帮助的东西。尝试反编译一个枚举类(例如用javap),你可以看到它是这样的。

因此,当您编写时:

Fruits example = Fruits.ORANGE

您没有创建该类的新实例:您只是指的是静态字段。


推荐阅读