定义列举型态基本上就像是在定义类别,定义列举型态时您也可以加入方法(Method),例如,您也许会想要为列 举值加上一些描述,而不是使用预设的toString()返回值来描述它。
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;
}
}
}
您可以使用下面这个程序来测试一下:
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),这是为了避免粗心的程序设计人员直接实例化它,一个不为公 开的建构方法可以作什么?来看看下面这个例子:
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),例如:
public interface IEnumDescription {
public String getDescription();
}您可以使用这个接口规定每个实作该接口的列举值,必须传回一个描述列举值的字符串,例如:
public enum OpConstants implements IEnumDescription {
TURN_LEFT("向左转"), TURN_RIGHT("向右转"), SHOOT("射击");
private String description;
OpConstants(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}