列举类型非常好用,当考虑到尺寸和速度的时候,就会显得代价很高,例如:
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
}
在一些条件下,这会执行的更快,虽然没有保障。