如何检查枚举值是否改变?

时间:2016-01-17 23:42:09

标签: java enums

我是Java和开发的新手,不知道如何做大部分的事情。所以我想问你们如何检查枚举值是否改变了。所以我有这个:

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

所以我想知道如何检测枚举值是否从任何一个变为其中任何一个。希望你知道我想说的话。 谢谢:))

1 个答案:

答案 0 :(得分: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;
    }

    ...
}

请注意,该代码是线程安全的,并且使其成为线程安全会增加很多复杂性。还有其他方法可以做到,但上面是一个非常标准的模式。