这与Android历史有关。在Froyo之前的版本中存在未经证实的性能问题。开发人员建议不要使用枚举。由于Froyo,性能设计文档被重写,如下所述。
您可能已经注意到,我们为Froyo重写了设计性能文档。以前,这是一堆可能在某个时候是真实的东西,但早已不再与现实有任何关系。在Froyo中,文件中的每一个主张都有一个基准来支持,以证明(或者,在未来,反驳)它。您可以在浏览器中仔细阅读“为性能而设计”基准测试。
但是,改变遗留内容的结构是没有意义的。
性能可能与需要存储字符串有关。为每个常量创建单个类与创建多个枚举之间存在显著差异。
例如,在 Java 7 中,当您有一个包含两个字段的枚举时,轮询常量中需要 44 个项目,对于具有两个静态最终整数的类,您只需要 17 个项目。
有什么区别
class ContantField {
public static final int f1 = 0;
public static final int f2 = 1;
}
enum ContantEnum {
E1,E2
}
这两个声明在存储和使用方式上有很大的不同。简化可能看起来像ContantEnum
class ContantEnum {
public static final Enum enum0 = new Enum("V1",0);
public static final Enum enum1 = new Enum("V2",1);
public static final Enum[] values = new Enum[] {enum0,enum1};
}
通过这种简化,您可以注意到需要比 更多的内存资源。enum
int
要回答您的问题,必须了解枚举的作用。枚举的一个作用是提高编译时类型安全性。
要指出这一点,请参阅此示例:
public void setImportantThing(int priviledge, int rights)
public void setImportantThing(Privilege p, Right r)
在这种情况下,我们可以传递任何作为int的值。在这种情况下,我们被迫使用正确的一个。int
enum
我们这里的情况是在编译时验证和运行时内存使用之间进行权衡。您应该自己决定何时应该使用以及在哪里足够安全。enum
static int
注意:enum是在1.5版中引入Java的,在此之前使用它们是相当有问题的。
在 Android Studio Beta 中,开发人员将能够使用注释来强制实施类型安全。