我开始非常喜欢在代码中使用C#和Java枚举,原因如下:
然而,Android框架有很多情况需要传递各种类型的标志,但它们似乎都没有使用枚举。我认为其使用有益的几个例子是Toast.LENGTH_SHORT
/ Toast.LENGTH_LONG
和View.GONE
,View.VISIBLE
等。
这是为什么?在Dalvik中,枚举的性能是否比简单的整数值差?还有其他一些我不知道的缺点吗?
答案 0 :(得分:65)
截至2011年3月,此答案已过期。
可以在Froyo及以上使用枚举 - 根据Android VM团队成员(以及Why was “Avoid Enums Where You Only Need Ints” removed from Android's performance tips?)的答案(his blog)。
官方Android团队的建议是,只要你能避免它就避免使用枚举:
枚举非常方便,但是 不幸的是,当大小时可能会很痛苦 和速度很重要。例如,这个:
public enum Shrubbery { GROUND, CRAWLING, HANGING }
添加740个字节 你的.dex文件与 相当于三个公共班级 静态最终的整数。在第一次使用时, 类初始值设定项调用 表示每个对象的对象的方法 枚举值。每个对象 得到自己的静态字段,然后 全集存储在一个数组中(a 静态字段称为“$ VALUES”)。那是 很多代码和数据,只有三个 整数。另外,这个:
Shrubbery shrub = Shrubbery.GROUND;
导致静态字段查找。如果 “GROUND”是一个静态的最终int,the 编译器会将其视为已知的 恒定并内联它。
答案 1 :(得分:14)
整数较小,需要较少的开销,这在移动设备上仍然很重要。
答案 2 :(得分:5)
我的一位同事对这种情况进行了一次小测试。他自动生成了一个
class
和enum
具有相同数量的“枚举”。我相信他创造了30000个参赛作品。
结果是:
.class
class
约为1200KB .class
enum
约为800KB 希望这有助于某人。