我想有一些想法
public enum CategoryTypes
{
Unknown = 0,
One = 1,
Two = 2,
}
在Java中?因此可以将Int转换为值,反之亦然。 有可能吗?
答案 0 :(得分:2)
Java中的枚举实际上是由您创建的枚举表示的类的Singleton实例。对于具有值的实例,您需要将其存储在类中,并创建一个私有构造函数来设置它们。另外一个getter方法会很好。例如:
public enum MyEnum {
INSTANCE(5),
N2(2);
private int member;
private MyEnum(int member) {
this.member = member;
}
}
答案 1 :(得分:1)
int i = Fruit.GRAPE.ordinal() ; // Beware: Horrible misnomer; actually a zero-based index rather than an ordinal.
...和...
Fruit f = Fruit.values()[i] ;
但不要这样做!请继续阅读以获取详细信息。
Enum
Java提供了一个非常有用,灵活且功能强大的枚举版本。
请参阅:
Enum
class 可以这么简单:
public enum Fruit {
APPLE ,
ORANGE ,
GRAPE
}
使用它:
Fruit f = Fruit.APPLE ;
通常我们不需要表示为枚举定义元素的顺序的基础整数。相反,我们只使用枚举的每个元素作为普通的Java对象,而不是仅仅使用int数字。但如果你坚持:
Enum::ordinal
来检索从零开始的索引号(这种方法是一个可怕的误称,因为它是一个索引而不是一个基于序数的索引)int i = Fruit.GRAPE.ordinal() ;
Enum::values
以生成一个数组,您可以通过从零开始的索引访问该数组Fruit f = Fruit.values()[i] ;
这样做几乎可以肯定你将无法充分利用Java enum 工具的全部功能。使用实际的枚举对象而不仅仅是int
可以为您提供类型安全性,确保有效值,并使您的代码更加自我记录。
如果您的目的是为每个枚举实例分配一个有意义的代码,请通过定义一个由构造函数填充的成员变量来明确地执行此操作,如上所述here和here。
您可以添加方法,甚至可以添加带参数的构造函数。更重要的是:EnumSet
和EnumMap
是针对极少内存和非常快速执行而优化的专用集合。
Set< Fruit > favoriteFruits = EnumSet.of( Fruit.APPLE , Fruit.ORANGE ) ;
奇怪的是,EnumSet
没有实现SortedSet
,但它被记录为按枚举定义的顺序返回实例。
搜索Stack Overflow以获得更多讨论和示例。
有关Enum
的主要示例,请参阅: