java enum 初始值_java enum无法赋初始值

本文讨论了如何在Java中为枚举类型设置初始值,以达到类似.NET的效果。通过实例展示了如何创建包含初始值的枚举,并在switch语句中进行判断。还探讨了在Java中使用enum代替数字以提高代码可读性的方法。
摘要由CSDN通过智能技术生成

各位大虾,想问一个有关的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吧。264c63b46e3dfc8e4753d241a62bc4f2.png

(不如你)

等 级:

blank.gif

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

Java codepublic 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不能实现吗e2eeee44da0ecdfe0ad3edbdc5333930.png

(SAGEZK)

等 级:

blank.gif

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

.NET 和 Java 枚举的实现原理不太一样,如果拿 Java 写上面代码,可以按下面方式写:Java codepublic 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;

}

}

7fccf7c5e75068c1be387fbe412c421b.gif

(别给我分)

等 级:

blank.gif

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值