大可制作:QQ群:31564239(asp|jsp|php|mysql)

Java Gossip: 枚举上的方法

定义枚举类型基本上就像是在定义类,定义枚举类型时您也可以加入方法(Method),例如,您也许会想要为枚举值加上一些描述,而不是使用默认的toString()返回值来描述它。
  • OpConstants.java
public enum OpConstants {
TURN_LEFT, TURN_RIGHT, SHOOT;

public String getDescription() {
switch(this.ordinal()) {
case 0:
return "向左转";
case 1:
return "向右转";
case 2:
return "射击";
default:
return null;
}
}
}

您可以使用下面这个程序来测试一下:
  • ShowEnum.java
public class ShowEnum {
public static void main(String[] args) {
for(OpConstants c : OpConstants.values()) {
System.out.printf("%s%n\t%s%n",
c, c.getDescription());
}
}
}

执行结果:
TURN_LEFT
        向左转
TURN_RIGHT
        向右转
SHOOT
        射击


枚举类型即然是类,那么您可以为它加上 建 构方法(Constructor)吗?答案是可以的,但是不得为公开(public),这是为了避免粗心的程序设计人员直接实例化它,一个不为公 开的构造方法可以作什么?来看看下面这个例子:
  • OpConstants.java
public enum OpConstants {
TURN_LEFT("向左转"), TURN_RIGHT("向右转"), SHOOT("射击");

private String description;

OpConstants(String description) {
this.description = description;
}

public String getDescription() {
return description;
}
}

在枚举TURN_LEFT、TURN_RIGHT、SHOOT成员时,您一并指定描述给它,这个描述会在建构枚举对象时使用,程 式中您将之设定给私用成员description,在使用getDescription()时将之返回,使用上面的ShowEnum,您可以得到相同的 显示结果。


与类一样,在定义枚举值时也可以一并实现 接口 (interface),例如:

  • IEnumDescription.java
public interface IEnumDescription {
public String getDescription();
}

您可以使用这个接口规定每个实现该接口的枚举值,必须传回一个描述枚举值的字符串,例如:
  • OpConstants.java
public enum OpConstants implements IEnumDescription {
TURN_LEFT("向左转"), TURN_RIGHT("向右转"), SHOOT("射击");

private String description;

OpConstants(String description) {
this.description = description;
}

public String getDescription() {
return description;
}
}