我开始非常喜欢在代码中使用 C# 和 Java 枚举,原因如下:
- 它们比整数、字符串或布尔标志集更加类型安全。
- 它们会产生更具可读性的代码。
- 将枚举设置为无效值比 int 或字符串更困难。
- 它们可以轻松发现变量或参数的允许值。
- 我读到的所有内容都表明它们在 C# 和大多数 JVM 中的性能与整数一样好。
然而,Android框架有很多需要传递各种类型标志的情况,但它们似乎都没有使用枚举。我认为使用它们会有所帮助的几个例子是Toast.LENGTH_SHORT
/ Toast.LENGTH_LONG
and View.GONE
, View.VISIBLE
, etc.
为什么是这样? Dalvik 中枚举的性能是否比简单整数值差?还有其他我不知道的缺点吗?
截至 2011 年 3 月,该答案已过时。
枚举可以在 Froyo 及更高版本上使用 - 根据这个答案(为什么“在只需要整数时避免枚举”从 Android 性能提示中删除? https://stackoverflow.com/a/5264861/383414)来自 Android VM 团队的成员(以及his blog http://elliotth.blogspot.com/2010/09/java-benchmarks.html).
上一个答案:
Android 团队的官方建议是尽可能避免使用枚举:
枚举非常方便,但是
不幸的是,当尺寸变大时可能会很痛苦
和速度很重要。例如,这个:
public enum Shrubbery { GROUND, CRAWLING, HANGING }
添加 740 字节
您的 .dex 文件与
具有三个公共的等效类
静态最终整数。首次使用时,
类初始值设定项调用
代表每个对象的方法
枚举值。每个对象
获得自己的静态字段,并且
全套存储在一个数组中(a
称为“$VALUES”的静态字段)。那是
大量代码和数据,仅三个
整数。另外,这个:
Shrubbery shrub = Shrubbery.GROUND;
导致静态字段查找。如果
“GROUND”是静态最终整数,
编译器会将其视为已知的
常量并内联它。
Source: 在只需要整数的地方避免使用枚举 http://developer.android.com/guide/practices/design/performance.html#avoid_enums
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)