2016-01-17 3 views
-3

Я новичок в Java и разработке и не знаю, как сделать большую часть материала. Поэтому я хочу попросить вас, ребята, проверить, изменилось ли значение перечисления. Так что у меня есть это:Как проверить, изменилось ли значение перечисления?

public enum GameState { 
    WAITING, 
    INTRO, 
    INTRO_WAIT, 
    INTRO_1, 
    INTRO_1_WAIT, 
    LOBBY_INTRO, 
    LOBBY, 
    INTRO_GAME1, 
    GAME1, 
    INTRO_GAME2, 
    GAME2; 
} 

Так что я хочу знать, как определить, если значение перечисления изменяется от любого из тех, к любому из них. Надеюсь, ты знаешь, что я пытаюсь сказать. Спасибо :)

+1

Непонятно, что вы подразумеваете под _ «изменено значение enum» _. Значения Enum являются константами. –

ответ

2

Я предполагаю, что вы имеете в виду, что у какого-то другого класса есть поле GameState state, и вы хотите знать, когда оно меняется от одного значения к другому.

Существует не «автоматический» способ сделать это. Пусть другой класс делает это поле приватным (что в любом случае является хорошей идеей), и в любое время его изменения (например, с помощью метода setState(GameState) он может выполнять любое действие, которое вы хотите - например, вызов любого GameStateListener, который был зарегистрирован с помощью . этот класс, или любой другой механизм проверки вы хотите

это может выглядеть примерно так:

public interface GameStateListener { 
    void onChange(GameState changingFrom, GameState changingTo); 
} 

public class Game { 
    private GameState state = WAITING; // or whatever initial value 
    private final Collection<GameStateListener> listeners = new ArrayList<>(); 

    public void registerListener(GameStateListener listener) { 
     listeners.add(listener); 
    } 

    public void changeState(GameState newState) { 
     for (GameStateListener listener : listeners) { 
      listener.onChange(state, newState); 
     } 
     this.state = newState; 
    } 

    ... 
} 

Обратите внимание, что этот код не потокобезопасное, и сделать его поточно-бы добавить Кроме того, есть и другие способы сделать это, но выше это довольно стандартный шаблон.