当前位置: 首页 > 知识库问答 >
问题:

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

谷梁宏恺
2023-03-14

我有一个场景,其中我有玩家类型ARCHERWARRIOR,和sorcer
对于玩家类型,我应该在玩家类中使用什么
常量final static字符串变量还是枚举?为什么<请说明原因。

共有3个答案

壤驷德寿
2023-03-14

除了不允许您提供不正确的值之外,枚举的另一个特性可能看起来很小,但在我看来非常重要。现代IDE可以自动建议枚举的值,而没有办法可靠地推断字符串常量的可能值(Intellij IDEA做后者,但仅适用于JDK类和流行库)。当您正在探索一个新的API时,这尤其有帮助。

桓修能
2023-03-14

ENums将你限制在所需的输入集合,而即使你使用常量字符串,你仍然可以使用其他字符串,而不是你逻辑的一部分。

这有助于你不犯错误,输入域外的东西,同时输入数据,也提高了程序的可读性。

此外,如果您愿意,您可以随时将枚举用作字符串。这里有一个参考。

明利
2023-03-14

假设您使用常量字符串(或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!

此外,Java中的枚举可以有更多的相关信息,也可以有行为。一切都好得多。

 类似资料:
  • 问题内容: 在Java 5及更高版本中,您具有foreach循环,该循环可以神奇地实现任何实现的对象: 但是,仍然没有实现,这意味着要迭代一个,您必须执行以下操作: 有谁知道为什么仍然不执行? 编辑: 为澄清起见,我不是在谈论枚举的语言概念,而是在Java API中称为“ 枚举 ” 的Java特定类。 问题答案: 枚举没有被修改为支持Iterable,因为它是一个接口,而不是一个具体的类(例如Ve

  • 包中的collections.list()方法返回而不是有充分的理由吗?

  • 枚举(enum)是定义一组命名常量的机制,用这种方式定义的常量被称作枚举常量 注:枚举常量的数据类型是整数 使用方法: 下面我们以文本语音转换为例子,说明一下枚举常量的使用方法。 首先我们在窗体上放入语音识别控件,按钮,通用对话框这些基本控件,来制作一个简单的语音文本朗读程序。 1 如果您使用过语音识别控件,就应该知道,使用这个控件的第一步就是先创建它,而创建命令的两个参数就是枚举常量,我们可以看

  • 问题内容: 在Java <1.5中,常量将像这样实现 并且您可以像这样使用它: 现在,显然在1.5中,您应该使用枚举: 现在您可以像这样使用它: 我觉得有点难看。现在,我可以轻松添加几个静态变量: 现在,我可以再次执行此操作: 具有枚举的所有类型安全性。 这是好风格还是坏风格?您能想到更好的解决方案吗? 更新资料 Vilx-是第一个强调我所缺少的东西的人-枚举应该是一等公民。在Java中,这意味着

  • 主要内容:声明常量,实例,VB.Net打印和显示常量,声明枚举,实例常量指的是程序在执行过程中可能不会改变的固定值。 这些固定值也被称为文字。 常量可以是任何基本数据类型,如整数常量,浮点常量,字符常量或字符串文字。 也有枚举常量。 常量的处理方式与常规变量一样,只是它们的值在定义之后无法修改。 枚举是一组命名的整数常量。 声明常量 在VB.Net中,使用语句声明常量。 语句用于模块,类,结构,过程或块级别,以代替文字值。 语句的语法是: 其中, attribut