这与安卓历史有关。在Froyo之前的版本中存在未经证实的性能问题,开发人员建议不要使用枚举。自从Froyo以来,“Designing for Performance”文档已被重写,如此处所述。
你可能已经注意到了,我们为Froyo重新编写了“设计性能”的文档。以前它只是一些在某些时候可能是正确的东西,但早已与现实毫无关系。在Froyo中,文档中的每一个声明都由基准测试来证明(或者在未来证明其错误)。 您可以在浏览器中查看“Designing For Performance”基准测试。
但改变遗留内容的结构没有意义。
性能可能与需要存储字符串有关。每个常量创建一个单独类与多个枚举之间存在显着差异。
例如,在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是Java 1.5版本中引入的,若在此之前使用它们会遇到一些问题more。
在Android Studio Beta中,开发者可以使用注解来强制实现类型安全。