列举类型非常好用,当考虑到尺寸和速度的时候,就会显得代价很高,例如:
public class Foo { public enum Shrubbery { GROUND, CRAWLING, HANGING } }
这会转变成为一个900字节的class文件(Foo$Shrubbery.class)。第一次使用时,类的初始化要在独享上面调用
Shrubbery shrub = Shrubbery.GROUND;
这会引起一个静态属性的调用,如果GROUND是一个静态的Final变量,编译器会把它当做一个常数嵌套在代码里面。
还有一点要说的,通过列举,你可以得到更好地API和一些编译时间上的检查。因此,一种比较平衡的做法就是:你应该尽一切方法在你的公用API中使用列举型变量,当处理问题时就尽量的避免。
在一些环境下面,通过ordinal
()方法获取一个列举变量的整数值是很有用的,例如:把下面代码
for (int n = 0; n < list.size(); n++) { if (list.items[n].e == MyEnum.VAL_X) // do stuff 1 else if (list.items[n].e == MyEnum.VAL_Y) // do stuff 2 }
替换为:
int valX = MyEnum.VAL_X.ordinal(); int valY = MyEnum.VAL_Y.ordinal(); int count = list.size(); MyItem items = list.items(); for (int n = 0; n < count; n++) { int valItem = items[n].e.ordinal(); if (valItem == valX) // do stuff 1 else if (valItem == valY) // do stuff 2 }
在一些条件下,这会执行的更快,虽然没有保障。