定义枚举类型基本上就像是在定义类,定义枚举类型时您也可以加入方法(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; } }
|