我有一个场景,其中有 玩家类型 ARCHER
,WARRIOR
, 和 SORCERER
。
在Player类中应该使用什么来表示一个玩家类型?
是使用常量 final static String 变量 还是 一个枚举?为什么?
请给出原因。
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...
vs
PlayerType playerType = "Fred"; // Nope, that doesn't work. Bang!
枚举类型限制您使用所需的输入集,而即使您使用常量字符串,仍然可以使用其他不属于逻辑的字符串。
这有助于您在输入数据时不犯领域外的错误,并提高程序的可读性。
此外,如果需要,您始终可以将枚举类型用作字符串。这是一个参考。
除了不允许您提供不正确的值之外,枚举的另一个特点可能看起来很小,但在我看来相当重要。现代IDE可以自动为枚举建议值,而无法可靠地推断字符串常量的可能值(Intellij IDEA对JDK类和流行库进行后者操作)。当您正在探索新的API时,这尤其有用。
你也可以查看Android源代码,它在尽可能的情况下都用IntDef/StringDef代替了枚举类型。例如:View.VISIBLE。
int
变量(并为各种类型命名常量)。 - Thilo