Я хочу создать конечный автомат, и большая часть примера кода, который я могу найти, использует перечисления, и мне просто интересно, дает ли это преимущество перед простым использованием строки или int для хранения состояния.
С перечислением:
класс TrafficLight { состояние перечисления {КРАСНЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ};
State state = State.GREEN;
public void iterate() throws InterruptedException {
switch (this.state) {
case RED:
System.out.println("RED");
Thread.sleep(1000);
this.state = State.GREEN;
break;
case GREEN:
System.out.println("GREEN");
Thread.sleep(1000);
this.state = State.YELLOW;
break;
case YELLOW:
System.out.println("YELLOW");
Thread.sleep(1000);
this.state = State.RED;
break;
}
}
общественный класс Основной {
public static void main(final String[] args) throws InterruptedException {
final TrafficLight a = new TrafficLight();
while (true) {
a.iterate();
}
}
}
со строкой
открытый класс TrafficLight {
String state = "GREEN";
public void iterate() throws InterruptedException {
switch (state) {
case "RED":
System.out.println("RED");
Thread.sleep(1000);
state = "GREEN";
break;
case "GREEN":
System.out.println("GREEN");
Thread.sleep(1000);
state = "YELLOW";
break;
case "YELLOW":
System.out.println("YELLOW");
Thread.sleep(1000);
state = "RED";
break;
}
}
}
(Оба используют один и тот же основной метод)
Они оба кажутся мне совершенно одинаковыми. Мне просто интересно, есть ли случаи, когда перечисления лучше или строка не работает.
Спасибо.