我开始真的喜欢在代码中使用C#和Java枚举,原因如下:
但是,Android框架有许多情况需要传递各种类型的标志,但它们似乎都没有使用枚举.在那里我会认为他们的使用将是有益的一对夫妇的例子是Toast.LENGTH_SHORT/ Toast.LENGTH_LONG和View.GONE,View.VISIBLE等等.
为什么是这样?在Dalvik中,枚举的性能是否比简单的整数值差?还有其他一些我不知道的缺点吗?
Seb*_*olm 66
截至2011年3月,此答案已过期.
枚举可用于Froyo及以上 - 根据这个答案(为什么"从Android的性能提示中删除了"只能从你需要的地方获取的枚举?)来自Android VM团队成员(以及他的博客).
Android团队的官方建议是在可以避免的情况下避免枚举:
枚举非常方便,但不幸的是,当尺寸和速度很重要时会很痛苦.例如,这个:
Run Code Online (Sandbox Code Playgroud)public enum Shrubbery { GROUND, CRAWLING, HANGING }与具有三个公共静态最终整数的等效类相比,您的.dex文件增加了740个字节.首次使用时,类初始值设定项会在表示每个枚举值的对象上调用该方法.每个对象都有自己的静态字段,完整集存储在一个数组中(一个名为"$ VALUES"的静态字段).这是很多代码和数据,只有三个整数.另外,这个:
Run Code Online (Sandbox Code Playgroud)Shrubbery shrub = Shrubbery.GROUND;导致静态字段查找.如果"GROUND"是静态final int,编译器会将其视为已知常量并将其内联.
我的一位同事对这种情况进行了一次小测试.他自动生成一个
class和一个enum具有相同数量的"枚举".我相信他生成了30000个条目.
结果是:
.class对于class大约1200KB.class对于enum大约800KB希望这有助于某人.
| 归档时间: |
|
| 查看次数: |
34062 次 |
| 最近记录: |