有时候您会需要定义一些常数供程序使用,您可以使用接口或类别来定义,例如定义操作常数:
public interface OpConstants { public static final int TURN_LEFT = 1; public static final int TURN_RIGHT = 2; public static final int SHOOT = 3; }
常数必须是可以直接取用,并且不可被修改的,所以我们在宣告时加上 static 与 final,事实上,对于接口来说,当中的常数预设就为public、static、final,即使您没有明确指定修饰,例如下例与上例是一样的:
public interface OpConstants { int TURN_LEFT = 1; int TURN_RIGHT = 2; int SHOOT = 3; }
这意谓着如果您实作的接口中有定义常数,您不可以重新指定该常数值,例如下例是错误的…
interface ISome { int const = 10; ... } public class Some implements ISome { public Some() { const = 20; // 这行是错的 } }
宣告常数之后,就可以在程序中直接使用 OperateConstants.TURN_LEFT之类的名称来取代常数值,例如:
public void someMethod() { .... doOp(OpConstants.TURN_RIGHT); .... } public void doOp(int op) { switch(op) { case OpConstants.TURN_LEFT: System.out.println("向左转"); break; case OpConstants.TURN_RIGHT: System.out.println("向右转"); break; case OpConstants.SHOOT: System.out.println("射击"); break; } }
如果使用类别来宣告的话,方法也是类似,例如:
public class OpConstants { public static final int TURN_LEFT = 1; public static final int TURN_RIGHT = 2; public static final SHOOT = 3; }
对于简单的常数设置,上面的作法已经足够了,不过在 J2SE 5.0 中新增了 列举型态(Enumerated Types),使用列举型态,除常数设定的功能之外,您还可以获得像编译时期型态检查等的更多好处。