为什么没有使用枚举?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么没有使用枚举?相关的知识,希望对你有一定的参考价值。

我已经使用了相当多的Java库/ API,并且注意到static final在任何地方都被使用,例如在android中。

为什么是这样?我知道你可以快速|标志在一起,这可能是有用的,但你可以同样使用EnumSet

我特别使用android的另一个问题是有大量的无范围标志,这对于枚举来说会更干净。 For example

然后你也不能将一个类的枚举与另一个类混淆,就像使用static final ints一样

答案

我没有找到Android项目的官方声明,但最可能的原因是:性能,特别是内存使用情况。

枚举(因为它们是Java类)需要比整数常量更多的内存。甚至官方的Android文档(曾经)都警告不要使用它们:

例如,枚举通常需要的内存是静态常量的两倍多。你应该严格避免在Android上使用枚举。

截至2017年1月的Android开发者文档“Manage Your App's Memory

有趣的是,current version of this page(截至2019年4月)不再提及Enums。也许问题在今天不太重要。


请注意,Android SDK提供了枚举的替代方案,它还为您提供了一些编译时安全性:annotation @IntDef。这似乎是你应该使用而不是枚举。

以上是关于为什么没有使用枚举?的主要内容,如果未能解决你的问题,请参考以下文章

Sleep() 方法后的代码片段没有被执行

Java中枚举的写法和用法

为啥尽管源代码没有变化,但从一个系统到另一个系统的片段数量却有很大差异?

JAVA枚举小结

如何使列表视图出现在片段中?

片段和活动之间没有传递值