我是Java和开发的新手,不知道如何做大部分的事情。所以我想问你们如何检查枚举值是否改变了。所以我有这个:
public enum GameState {
WAITING,
INTRO,
INTRO_WAIT,
INTRO_1,
INTRO_1_WAIT,
LOBBY_INTRO,
LOBBY,
INTRO_GAME1,
GAME1,
INTRO_GAME2,
GAME2;
}
所以我想知道如何检测枚举值是否从任何一个变为其中任何一个。希望你知道我想说的话。 谢谢:))
答案 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;
}
...
}
请注意,该代码不是线程安全的,并且使其成为线程安全会增加很多复杂性。还有其他方法可以做到,但上面是一个非常标准的模式。