在switch中使用enum,是enum提供的一项非常便利的功能。一般情况我们必须使用一个enum类型来修饰一个enum实例,但是在case语句中却不比如此。

    1. enum Signal{
    2. GREEN,YELLOW,RED;
    3. }
    4. public class TrafficLight {
    5. Signal color = Signal.RED;
    6. public void change() {
    7. switch (color) {
    8. case RED:
    9. color = Signal.GREEN;
    10. break;
    11. case GREEN:
    12. color = Signal.YELLOW;
    13. break;
    14. case YELLOW:
    15. color = Signal.RED;
    16. break;
    17. }
    18. }
    19. @Override
    20. public String toString() {
    21. return "当前信号灯为:" + color;
    22. }
    23. public static void main(String[] args) throws InterruptedException {
    24. TrafficLight light = new TrafficLight();
    25. for(int i=0;i<5;i++){
    26. light.change();
    27. System.out.println(light);
    28. }
    29. }
    30. }

    上面的程序使用Switch和enum简单实现了一个状态机,我们可以发现在switch中并没用因为没用default语句而报错。那是因为并不是每一个enum实列都有对应的case语句,如果在case中添加return的话编译器就会提醒我们添加default。