嗨,我很喜欢在Java中使用枚举类型来帮助代码的可读性和限制无效值。然而,有人告诉我Java中的enum可以做的不仅仅是创建一组可能的命名值。
请问有人能列出Java的枚举允许的基本功能以及示例或者其他获取更多信息的地方吗?
非常感谢, Black Vegetable
编辑: 正如建议的那样,这个问题应该是在询问Java中枚举和类之间有什么区别。我不知道它们是那样强大的? 那么它们的区别是什么呢?
请问有人能列出Java的枚举允许的基本功能以及示例或者其他获取更多信息的地方吗?
非常感谢, Black Vegetable
编辑: 正如建议的那样,这个问题应该是在询问Java中枚举和类之间有什么区别。我不知道它们是那样强大的? 那么它们的区别是什么呢?
Java的enum
基本上是一个成熟的类。
您可以:
但您不能:
enum
已经隐式地扩展了java.lang.Enum
,而Java仅支持单一实现继承)它们具有:
valueOf
和values
"Foo" == new String("Foo")
可能返回false)。此外,每个枚举类都扩展了Enum<T extends Enum<T>>
,因此您可以根据需要以通用方式使用这些枚举类型(学会喜欢name()
和valueOf()
)。 *类加载器是棘手的问题...是的,在这里有一个小例外。除了其他人已经提到的内容,它们还有很多用途。
让我再介绍一种你可以使用它们的方式。我将它们用作对象的原型。这样,我不需要在网络上发送整个对象,而只需发送一个原型标识符。下面是我从一个简单的游戏中编写的示例。
public enum SimpleUnits
{
BROTHERHOOD_ELITE_TROOPER,
CAPITOL_FREE_MARINE,
IMPERIAL_BLOOD_BERET;
public static SimpleUnit getUnit(SimpleUnits unit)
{
SimpleUnit result = null;
// new SimpleUnit(enumeName, hpMax, speed, CC, MW, PW, LD, ST, MV, AC, W, A, COST);
switch(unit)
{
case BROTHERHOOD_ELITE_TROOPER:
result = new SimpleUnit(BROTHERHOOD_ELITE_TROOPER.name(), 5, 0.15, 12, 12, 12, 12, 3,
5, 3, 2, 1, 100, "images/units/eliteTrooper.png");
break;
case CAPITOL_FREE_MARINE:
result = new SimpleUnit(CAPITOL_FREE_MARINE.name(), 5, 0.15, 12, 12, 12, 12, 3,
5, 3, 2, 1, 100, "images/units/freeMarine.png");
break;
case IMPERIAL_BLOOD_BERET:
result = new SimpleUnit(IMPERIAL_BLOOD_BERET.name(), 5, 0.15, 12, 12, 12, 12, 3,
5, 3, 2, 1, 100, "images/units/bloodBeret.png");
break;
}
return result;
}
public SimpleUnit getUnit()
{
return SimpleUnits.getUnit(this);
}
public static SimpleUnit getUnit(String enumeName)
{
return SimpleUnits.valueOf(enumeName).getUnit();
}
}