woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

java enum无法赋初始值

各位大虾,想问一个有关的java enum 问题
在.net 中 enum元素可以赋值如:
enum Direction { None = 0xff, Up = 2, Down = 4, Left = 8, Right = 16 };
但java里是默认元素为0 1 2 3,在java怎么样才能达到以上效果。如有一段.net 代码:
......
enum Direction { None = 0xff, Up = 2, Down = 4, Left = 8, Right = 16 };
...
switch (i[x, y])
                {
                    case (int)Direction.Left:
                        x--;
                        break;
                    case (int)Direction.Right:
                        x++;
                        break;
                    case (int)Direction.Up:
                        y--;
                        break;
                    case (int)Direction.Down:
                        y++;
                        break;
                    case (int)Direction.None:
                        return;
                }
这段代码在java里怎么实现,在网上找了很久也没答案,在这里提问出来,希望能有答案,谢谢各位。

 

#1楼 得分:0回复于:2008-11-11 00:28:04

不明白,既然用了enum,为什么还要要用数字来判断呢?
一定要这样的话,那还是老办法static final吧。

  • bruni用户头像
  • bruni
  • (不如你)
  • 等 级:

#2楼 得分:10回复于:2008-11-11 00:33:13

Java code

public enum Direction { None(0xff), Up(2), Down (4), Left( 8), Right (16); private final int value; /** * Constructor. */ private Direction(int value) { this.value = value; } /** * Get the value. * @return the value */ public int getValue() { return value; } public static void main(String args[]) throws Exception { Direction[] arr = {None, Up, Down, Left, Right}; for (int i = 0; i < arr.length; i++) { switch(arr[i]) { case None: System.out.println("None"); case Up: System.out.println("Up"); case Down: System.out.println("Down"); case Left: System.out.println("Left"); case Right: System.out.println("Right"); default: System.out.println("Nothing to match"); } } } }

#3楼 得分:0回复于:2008-11-11 00:33:28

因为i数组存的是数字,java里的enum不能实现吗

  • sagezk用户头像
  • sagezk
  • (SAGEZK)
  • 等 级:

#4楼 得分:10回复于:2008-11-11 00:44:40

.NET 和 Java 枚举的实现原理不太一样,如果拿 Java 写上面代码,可以按下面方式写:

Java code

public enum Direction {UP, DOWN, LEFT, RIGHT} //Java 中习惯于把枚举常量写成全大写字符的形式 Direction[][] i = new Direction[100][100]; ... if (i[x][y] != null) { //Java 中枚举类型的变量可以取值为 null,所以可以用 null 表示 None 即无方向 switch (i[x][y]) { case LEFT: x--; break; case RIGHT: x++; break; case UP: y--; break; case DOWN: y++; break; } }

  • Dan1980用户头像
  • Dan1980
  • (别给我分)
  • 等 级:

#5楼 得分:0回复于:2008-11-11 00:56:21

不要为了用enum而用enum,既然你要判断是int,那就用int,没必要非用enum不可。
如果你一定要用enum,那就把那个数组声明为enum类型。
是这个道理不?没必要简单问题复杂化。

#6楼 得分:0回复于:2008-11-11 01:17:08

这里说明一下,i数组存的是很多数字,是模仿迷宫存放数字用的,当然可以不用enum,swith里可以数字,但这样可读性是不是比较差,因为enum里存的是方向,如果用数字判断,别人看了就不知这些数字是什么来的

#7楼 得分:0回复于:2008-11-11 01:24:27

4楼的大哥,case LEFT://这里的LEFT可以转为数字吗,因为i数组存的是数字,不是很明白java的enum

posted on 2009-08-17 11:32 肥仔 阅读(10030) 评论(0)  编辑 收藏 引用 所属分类: Web-后台


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理