枚举转数组的问题

myj870517 2008-07-16 11:21:45
enum Direction {
L, LU, U, RU, R, RD, D, LD, STOP
};

中间省略


Direction[] dirs = Direction.values();


values() 是什么方法 JDK上怎么没查到 是在lang.enum里面查吗
...全文
587 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sagezk 2008-07-16
  • 打赏
  • 举报
回复
通过 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 来表示静止不动的状态。
sagezk 2008-07-16
  • 打赏
  • 举报
回复
enum Direction { L, LU, U, RU, R, RD, D, LD, STOP };


所有以上面形式创建的枚举类型都会被编译器处理成一个继承自 java.lang.Enum 这个类的子类,而 values() 方法是处理过程中编译器帮你加的。
myj870517 2008-07-16
  • 打赏
  • 举报
回复
顶起来,谁回答一下
myj870517 2008-07-16
  • 打赏
  • 举报
回复
哦,看见了,可是我的问题是在java.lang.enum里面没看见values() 这个方法呀
lovingprince 2008-07-16
  • 打赏
  • 举报
回复
给你看一个东西吧,我刚才答错了,晕头了。

这个是枚举源代码,其实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);
}
}

lovingprince 2008-07-16
  • 打赏
  • 举报
回复
这是一个protected方法,你当然看不到啦。只能在他的子类中调用。
myj870517 2008-07-16
  • 打赏
  • 举报
回复
还有怎么反编译?
myj870517 2008-07-16
  • 打赏
  • 举报
回复
可是Enum里面没有values()这个方法呀
lovingprince 2008-07-16
  • 打赏
  • 举报
回复
这个是Enum类的方法。你可以反编译进去看就知道啦,呵呵。
myj870517 2008-07-16
  • 打赏
  • 举报
回复
懂了 谢谢大家
lord_is_layuping 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 myj870517 的回复:]
哦,看见了,可是我的问题是在java.lang.enum里面没看见values() 这个方法呀
[/Quote]

  两个静态方法“隐藏”在所有枚举类型声明中。

因为它们是枚举子类上的静态方法,而不是Enum本身的方法,所以它们在java.lang.Enum的javadoc中没有出现。


  第一个是values(),返回一个枚举类型所有可能值的数组。
  第二个是valueOf(String arg0),为提供的字符串返回一个枚举类型,该枚举类型必须精确地匹配源代码声明。
sagezk 2008-07-16
  • 打赏
  • 举报
回复
你的枚举常量设置的有问题,STOP 是 Direction(方向)吗?你可以用 dirs = null 来表示静止不动的状态。
lovingprince 2008-07-16
  • 打赏
  • 举报
回复
一般情况下你都直接使用enum A{} 的A来作为抽象,而不是用Enum作为抽象,所以没有问题的。你用A就不会出问题啊。这个方法就在A里面定义的
myj870517 2008-07-16
  • 打赏
  • 举报
回复
这是马士兵的坦克大战里面的,values()是编译器帮我加的?那么马士兵就直写了values()这个方法了,但是如果我自己写,我在enum里面找不到这个方法怎么办?
lovingprince 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 myj870517 的回复:]
哦,看见了,可是我的问题是在java.lang.enum里面没看见values() 这个方法呀
[/Quote]

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

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧