为什么使用枚举而不是常量?在软件设计和可读性方面哪个更好

2022-08-31 11:13:47

我有一个场景,其中我有玩家类型,和。
在玩家类中,我应该为玩家类型使用什么?
常量最终静态字符串变量还是枚举?为什么?
请帮忙说明原因。ARCHERWARRIORsorcerer


答案 1

假设您使用常量字符串(或值 - 它们也是如此):int

// Constants for player types
public static final String ARCHER = "Archer";
public static final String WARRIOR = "Warrior";

// Constants for genders
public static final String MALE = "Male";
public static final String FEMALE = "Female";

然后你最终并不真正知道你的数据类型 - 导致潜在的错误代码:

String playerType = Constants.MALE;

如果您使用枚举,则最终将变为:

// Compile-time error - incompatible types!
PlayerType playerType = Gender.MALE;

同样,枚举给出了一组受限制的值:

String playerType = "Fred"; // Hang on, that's not one we know about...

PlayerType playerType = "Fred"; // Nope, that doesn't work. Bang!

此外,Java 中的枚举可以包含与其关联的更多信息,并且还可以具有行为。各方面都好多了。


答案 2

枚举将您限制为所需的输入集,而即使您使用常量字符串,您仍然可以使用不属于逻辑的其他字符串。

这有助于您不犯错误,在输入数据的同时输入域外的内容,并提高程序的可读性。

此外,如果需要,您始终可以将枚举用作字符串。这是一个参考