gpt4 book ai didi

java - 为什么枚举序数不是常量表达式?

转载 作者:行者123 更新时间:2023-12-02 02:53:29 25 4
gpt4 key购买 nike

看一下这段代码:

public class TestClass {
public static void main(final String[] args) {
switch (0) {
case MyEnum.Test.ordinal():
break;
}
}

public static enum MyEnum {
Test;
}
}

此代码将无法编译并显示错误消息:

case expressions must be constant expressions.

这是因为 MyEnum.Test.ordinal() 不是常量。根据javadocordinal() 方法执行以下操作:

Returns the ordinal of this enumeration constant (its position in its enum declaration, where the initial constant is assigned an ordinal of zero).

那么为什么序数不是常数呢?枚举的位置不是恒定的吗?这是怎么回事?

最佳答案

Enum.ordinal() 是一个函数。函数调用永远不能是编译时常量。 (甚至还没有接近。)

该语言的创建者也许可以选择引入一个特殊的关键字,而不是用于获取 Enum 序数的函数(它可以是 Enum.ordinal ,如 Object.class )但我想他们决定反对它是因为

a)它不必要地使语言复杂化,并且

b)它根本不提供任何您无法通过其他方式完成的东西。

c) 来自 ordinal() 的文档:“大多数程序员不会使用此方法。它是为复杂的基于枚举的数据结构(例如 EnumSet 和 EnumMap)而设计的。 ”。

在您的示例中,您可以尝试将 int 转换为 enum 的实例,然后按实际实例切换

关于java - 为什么枚举序数不是常量表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43442460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com