enum Direction {
L, LU, U, RU, R, RD, D, LD, STOP
};中间省略
Direction[] dirs = Direction.values();
values() 是什么方法 JDK上怎么没查到 是在lang.enum里面查吗

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【myj870517】截止到2008-07-16 11:21:57的历史汇总数据(不包括此帖):
    发帖的总数量:6                        发帖的总分数:200                      每贴平均分数:33                       
    回帖的总数量:2                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:6                        结贴的总分数:200                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    这个是Enum类的方法。你可以反编译进去看就知道啦,呵呵。
      

  3.   

    可是Enum里面没有values()这个方法呀
      

  4.   

    这是一个protected方法,你当然看不到啦。只能在他的子类中调用。
      

  5.   

    给你看一个东西吧,我刚才答错了,晕头了。这个是枚举源代码,其实values是枚举定义的一个静态方法。enum A{
    b,a;
    } static final class A extends Enum
        {        public static A[] values()
            {
                A aa[];
                int i;
                A aa1[];
                System.arraycopy(aa = ENUM$VALUES, 0, aa1 = new A[i = aa.length], 0, i);
                return aa1;
            }        public static A valueOf(String s)
            {
                return (A)Enum.valueOf(com/taobao/et/biz/Test$A, s);
            }        public static final A b;
            public static final A a;
            private static final A ENUM$VALUES[];        static 
            {
                b = new A("b", 0);
                a = new A("a", 1);
                ENUM$VALUES = (new A[] {
                    b, a
                });
            }        private A(String s, int i)
            {
                super(s, i);
            }
        }
      

  6.   

    哦,看见了,可是我的问题是在java.lang.enum里面没看见values() 这个方法呀
      

  7.   

    enum Direction { L, LU, U, RU, R, RD, D, LD, STOP };所有以上面形式创建的枚举类型都会被编译器处理成一个继承自 java.lang.Enum 这个类的子类,而 values() 方法是处理过程中编译器帮你加的。
      

  8.   

    通过 Direction dirs = null; 这句语法不报错儿就能证明 dirs 只是个对象变量。
    另外如果 dirs 不为空引用 null,还可以结合 switch 来简化程序代码,如下:if (dirs != null) {
        switch (dirs) {
        case L:
            //...
            break;
        case LU:
            //...
            break;
        case U:
            //...
            break;
        case RU:
            //...
            break;
        case R:
            //...
            break;
        case RD:
            //...
            break;
        case D:
            //...
            break;
        case LD:
            //...
            break;
        case STOP:
            //...
            break;
        }
    }另外你的枚举常量设置的有问题,STOP 是 Direction(方向)吗?你可以用 dirs = null 来表示静止不动的状态。
      

  9.   


    我说了,这个是不是enum里面的方法了啊。是编译器自动生成的。
      

  10.   

    这是马士兵的坦克大战里面的,values()是编译器帮我加的?那么马士兵就直写了values()这个方法了,但是如果我自己写,我在enum里面找不到这个方法怎么办?
      

  11.   

    一般情况下你都直接使用enum A{} 的A来作为抽象,而不是用Enum作为抽象,所以没有问题的。你用A就不会出问题啊。这个方法就在A里面定义的
      

  12.   

    你的枚举常量设置的有问题,STOP 是 Direction(方向)吗?你可以用 dirs = null 来表示静止不动的状态。
      

  13.   


      两个静态方法“隐藏”在所有枚举类型声明中。
        
        因为它们是枚举子类上的静态方法,而不是Enum本身的方法,所以它们在java.lang.Enum的javadoc中没有出现。
      第一个是values(),返回一个枚举类型所有可能值的数组。
      第二个是valueOf(String arg0),为提供的字符串返回一个枚举类型,该枚举类型必须精确地匹配源代码声明。