我开始真正喜欢在代码中使用 C # 和 Java 枚举的原因有以下几个:
然而,Android 框架有许多情况下需要传递各种类型的标志,但似乎没有一个使用枚举。一对夫妇的例子,我认为他们的使用将是有益的是 Toast.LENGTH_SHORT/Toast.LENGTH_LONG和 View.GONE,View.VISIBLE等。
Toast.LENGTH_SHORT
Toast.LENGTH_LONG
View.GONE
View.VISIBLE
为什么会这样?枚举在 Dalvik 的表现是否比简单的整数值差?还有什么我不知道的缺点吗?
整数更小,需要更少的开销,这一点在移动设备上仍然很重要。
这个答案在2011年3月已经过时了
Enums 可以在 Froyo 和 up 上使用——根据来自 Android VM 团队(和 他的博客)成员的这个答案(为什么从 Android 的性能提示中删除了“避免只需要 Ints 的枚举”?)。
Android 团队的官方建议是尽可能避免枚举:
枚举非常方便,但是 不幸的是,当大小可以是痛苦的 and speed matter. For example, this: public enum Shrubbery { GROUND, CRAWLING, HANGING } 添加740字节到 你的.dex 文件相比 三个公众人士的同等级别 静态最终整数。在第一次使用时, 类初始值设定项调用 对象上的方法,这些对象表示 枚举值。每个对象 获取自己的静态字段,而 整个集合存储在一个数组中(a 静态字段称为“ $VALUES”) 很多代码和数据,就三个人 整数。此外,这个: Shrubbery shrub = Shrubbery.GROUND; 导致静态字段查找 “ GROUND”是一个静态的最终整数,则 编译器会将其视为已知的 常数和内联。
枚举非常方便,但是 不幸的是,当大小可以是痛苦的 and speed matter. For example, this:
public enum Shrubbery { GROUND, CRAWLING, HANGING }
添加740字节到 你的.dex 文件相比 三个公众人士的同等级别 静态最终整数。在第一次使用时, 类初始值设定项调用 对象上的方法,这些对象表示 枚举值。每个对象 获取自己的静态字段,而 整个集合存储在一个数组中(a 静态字段称为“ $VALUES”) 很多代码和数据,就三个人 整数。此外,这个:
Shrubbery shrub = Shrubbery.GROUND;
导致静态字段查找 “ GROUND”是一个静态的最终整数,则 编译器会将其视为已知的 常数和内联。
资料来源: 避免只需要整数的枚举
我的一个同事针对这种情况进行了一个小测试 class和 enum都有相同数量的“枚举”。我相信他生成了30000个条目。
class
enum
结果是:
.class
希望这对谁有帮助。