在switch中使用enum,是enum提供的一项非常便利的功能。一般情况我们必须使用一个enum类型来修饰一个enum实例,但是在case语句中却不比如此。
enum Signal{
GREEN,YELLOW,RED;
}
public class TrafficLight {
Signal color = Signal.RED;
public void change() {
switch (color) {
case RED:
color = Signal.GREEN;
break;
case GREEN:
color = Signal.YELLOW;
break;
case YELLOW:
color = Signal.RED;
break;
}
}
@Override
public String toString() {
return "当前信号灯为:" + color;
}
public static void main(String[] args) throws InterruptedException {
TrafficLight light = new TrafficLight();
for(int i=0;i<5;i++){
light.change();
System.out.println(light);
}
}
}
上面的程序使用Switch和enum简单实现了一个状态机,我们可以发现在switch中并没用因为没用default语句而报错。那是因为并不是每一个enum实列都有对应的case语句,如果在case中添加return的话编译器就会提醒我们添加default。