BlogJava-总也睡不醒-最新评论http://www.blogjava.net/lyj/CommentsRSS.aspx<font color="6666cc"> 一个人只拥有今生今世是不够的,他还应该拥有诗意的世界 </font>zh-cnThu, 28 Feb 2008 02:07:15 GMTThu, 28 Feb 2008 02:07:15 GMTcnblogsre: 提问:使用枚举的类中为何会出现一个匿名类?http://www.blogjava.net/lyj/archive/2007/08/08/135032.html#135233总也睡不醒总也睡不醒Wed, 08 Aug 2007 06:13:00 GMThttp://www.blogjava.net/lyj/archive/2007/08/08/135032.html#135233 没人理我!自己先顶一个。
 
我用Jode反编译后,TestEnum类成了这样:
  1public class TestEnum
  2{
  3    public static void main(String[] strings) {
  4    MyColor mycolor = MyColor.blue;
  5    switch (ANONYMOUS CLASS TestEnum$1.$SwitchMap$MyColor
  6        [mycolor.ordinal()]) {
  7    case 1:
  8        System.out.println("red");
  9        break;
10    case 2:
11        System.out.println("green");
12        break;
13    case 3:
14        System.out.println("blue");
15        break;
16    default:
17        System.out.println("default");
18    }

19    System.out.println(mycolor);
20    }

21}
注意看switch语句块和原文的不同。第五行出现了匿名类,这应该就是TestEnum$1.class产生的原因。再看每个case语句,red green blue变成了1 2 3。这也是枚举常量的实质。不过我又奇怪了, 枚举类型的ordinal方法API帮助上是这么写的:“返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)”。
 
所以啊,不研究不知道,一研究问题一大堆。看来我得要理解JVM和Java对枚举和匿名类的处理方式了。不过以我现在的水平,不是一时半会儿能完全想明白的。
 
那位高手能指点我一下吗?谢谢了先!


总也睡不醒 2007-08-08 14:13 发表评论
]]>