java - 为什么枚举不会导致无限递归?
问题描述
在 java 中,枚举声明如下:
enum Fruits{
BANANA,
ORANGE,
APPLE
}
在示例中,声明的枚举与类的类型相同。因此,当我创建枚举 Fruits 的实例时:
Fruits example = Fruits.ORANGE
这意味着创建了 enum fruits 的一个实例,然后继续为每个 enum 创建实例。鉴于水果中的每个枚举都是水果类型,因此它们会继续创建更多实例……依此类推,从而导致无限递归。我错过了什么吗?
解决方案
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
您没有创建该类的新实例:您只是指的是静态字段。
推荐阅读
- telegram-bot - 有没有办法在不同的机器人之间传输 Telegram 文件 ID?
- vue.js - 通过导航守卫从“/”重定向到“/”。并刷新页面 404
- java - 使用蓝牙从 Android App 读取数据
- accessibility - Authorize.Net Verified Merchant Seal (AuthorizeNetSeal) 不符合 WAI-ARIA
- c# - 使用 Confluent 的 .NET API 的多个 Topis 的 Kafka 消费者
- macos - 如何在不运行容器的情况下访问容器内部
- c++ - 有人可以详细解释这个回文代码是如何工作的吗?
- python - 如何按行对熊猫数据框的值求和?
- .net - 如何在.net中拆分一行而不拆分单词
- python - TF2.x 自定义损失函数,numpy