为什么我要使用枚举,而不仅仅是一个类?

纯白鼬

前几天,我在用Java帮助一位朋友,他们在问有关Enums的问题。我解释了(类似)的C语法

enumeration Difficulty{
    BEGINNER= 1;
    PRO=5;
    EXPERT = 11;
}

不是要走的路,Java语法是something(1);让您构造一个接受int的构造函数,然后执行此操作,等等。

但是他们拦住了我,问:“如果我们使用构造函数等等,为什么要麻烦枚举,为什么不仅仅拥有一个新类呢?”

我无法回答。那么为什么在这种情况下为什么要使用枚举而不是类呢?

白金Azure:

枚举受到严格限制。不能在指定值之外定义一个枚举值(而使用类可以调用new以创建新值)。

至少大多数JVM也对枚举进行了严重的优化,并且还有一些新的类和语言功能可以利用枚举的紧凑性和速度。例如,创建了新类EnumSetEnumMap,分别使用位集和数组来实现枚举键集或映射(这可能是那些抽象数据类型最快的实现)。

此外,枚举类型可以在switch语句中使用。如果您使用的是Java1.7之前的版本,那么这是定制switch语句的最佳选择String由于类型安全性,它可能仍优于使用值;错误地枚举枚举值会导致编译时错误,但是错误地字符串会导致错误。更加隐蔽的运行时错误-或更糟糕的是,您在真正盯着代码看错字之前是无法理解的逻辑错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我最后得到一个带有.vhost的进程的名称,而不仅仅是名称?

为什么需要使用 new Random() 而不仅仅是 Random Randomnum?

为什么需要使用Flask扩展,而不仅仅是裸库?

为什么要使用延迟变量/计算属性,而不仅仅是方法

为什么要使用react-redux而不仅仅是redux?

为什么需要使用 const A& 而不仅仅是 A&?

为什么 Iterator::next 返回一个 Option 而不仅仅是一个项目?

为什么这个 case 语句需要一个“if else”而不仅仅是一个“if”?

我得到的是我所有的输出,而不仅仅是一个

为什么re.sub替换整个模式,而不仅仅是其中的一个捕获组?

为什么mapStateToProps和mapDispatchToProps不仅仅是Redux中的一个函数?

使用group by的sql不仅仅是一个表

我如何使用 GitHub Pages 创建不仅仅是一个 hello world?

为什么我在调用 vDataFrame.count 时看到的是一个表格,而不仅仅是平均值

Php:为什么我的代码会回显表中的所有值,而不仅仅是这些值的一个子集?

为什么+ =添加和INT。一个列表的另一个并不仅仅是+?

为什么Finatra为什么使用flatMap而不仅仅是地图?

如何创建一个类并存储它,而不仅仅是创建它

为什么我应该监视流程,而不仅仅是链接和陷阱出口?

反应本机| 为什么我的函数立即运行,而不仅仅是onPress?

为什么我整个div都是可点击的,而不仅仅是链接?

pf阻止所有输入/输出流量,而不仅仅是我要阻止的一个端口

要用 Hooks 创建函数组件,为什么我必须使用 JSX,而不仅仅是函数调用?

实现一个不仅仅是设置变量的Scala构造函数

如何移动不仅仅是一个分区

转换 Pandas DataFrames 组 - 完全,而不仅仅是一个系列

引用整列,而不仅仅是一个单元格的Google表格

SQLAlchemy删除所有项目,而不仅仅是第一个

getMany 从 TypeORM 存储库中获取,而不仅仅是一个