Java枚举返回Int
我在声明枚举时遇到问题。我试图创建的是“DownloadType”的枚举,其中有3种下载类型(音频、视频、音频和视频)
我实施了以下代码:
private enum DownloadType {
AUDIO(0), VIDEO(1), AUDIO_AND_VIDEO(2);
private final int value;
private DownloadType(int value) {
this.value = value;
}
}
如果我像这样使用它,它可以很好地工作:
DownloadType.AUDIO_AND_VIDEO.value;
然而,我希望它,这样我就不必要求“价值”。我可能弄错了,但这是Java中几个类的工作方式,例如字体,要设置字体样式,您可以使用:
Font.PLAIN
返回一个int值,我们不使用:
Font.PLAIN.value
# 1 楼答案
只需对枚举值调用
ordinal()
方法,即可检索其对应的数字。不需要用它的值声明加法属性,每个枚举值在默认情况下都有自己的编号,从零开始赋值,每个值按声明的顺序递增一您不应该只依赖于
enum
的int
值。Java中的枚举是另一种怪物,与C中的枚举不同,后者依赖于它们的整数代码关于您在问题中提供的示例,
Font.PLAIN
有效,因为这只是Font类的一个整数常量。如果您绝对需要一个(可能正在更改)数字代码,那么enum
不是适合此工作的工具,最好使用数字常量# 2 楼答案
Font.PLAIN是而不是枚举。它只是一个
int
。如果需要从枚举中提取值,则不能避免调用方法或使用.value
,因为枚举实际上是自己类型的对象,而不是原语如果您确实只需要一个
int
、和您已经接受类型安全性丢失的事实,那么用户可能会将无效值传递给API,您也可以将这些常量定义为int
:顺便说一下,
value
字段实际上是多余的,因为还有一个.ordinal()
方法,所以可以将enum
定义为:并使用
编辑:更正了代码^Java中不允许使用{}。有关如何在Java中定义静态类的解释和详细信息,请参见this SO answer
# 3 楼答案
如果需要获取int值,只需在枚举中为该值设置一个getter:
或者您可以简单地使用
ordinal()
方法,该方法将返回枚举常量在枚举中的位置# 4 楼答案
如果要将枚举与字符串串联,则可以重写toString方法以返回int:
然后你可以简单地使用:
将调用toString()方法
请注意,以编程方式使用toString()通常被认为是一种糟糕的做法——它仅适用于人眼,但这是实现您要求的唯一方法
# 5 楼答案
首先,你应该问自己以下问题:你真的需要整数吗强>
枚举的目的是拥有一组项(常量),这些项在代码中具有意义,而不依赖外部值(如int)。Java中的枚举可以用作开关状态的参数,并且可以使用“==”相等运算符(以及其他运算符)安全地对它们进行比较
方案1(无需输入):
通常,后面不需要整数,只需使用:
用法:
方案2(需要整数):
尽管如此,有时将枚举转换为int可能很有用(例如,如果外部API需要int值)。在这种情况下,我建议使用
toXxx()
样式将这些方法标记为转换方法。用于打印覆盖toString()
摘要
ordinal()
获取枚举的整数,因为如果您更改顺序(例如通过插入值),该值可能会更改。如果您正在考虑使用ordinal()
,那么最好使用方案1李># 6 楼答案
你可以试试这个代码
可以像这样使用此枚举:
DownloadType.AUDIO.ordinal()
。希望这段代码对您有所帮助