ITEEDU

Java Gossip: 常数设置

有时候您会需要定义一些常数供程序使用,您可以使用接口或类别来定义,例如定义操作常数:

OpConstants.java
public interface OpConstants {
	public static final int TURN_LEFT = 1;
	public static final int TURN_RIGHT = 2;
	public static final int SHOOT = 3;
}

常数必须是可以直接取用,并且不可被修改的,所以我们在宣告时加上 staticfinal,事实上,对于接口来说,当中的常数预设就为public、static、final,即使您没有明确指定修饰,例如下例与上例是一样的:

OpConstants.java
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;
	}
}

如果使用类别来宣告的话,方法也是类似,例如:

OpConstants.java
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),使用列举型态,除常数设定的功能之外,您还可以获得像编译时期型态检查等的更多好处。