我有一个Java对象,可以转换为用户定义的不同状态。但是这些过渡应该按顺序进行。我可以通过哪些方式来验证状态更改?
状态:
唤醒, 做好准备, 工作, 吃, 睡觉
对象可以具有以下状态,但应遵循顺序。该对象可以从唤醒进入准备状态,但无法正常工作。
我尝试使用HashMaps和Arrays,但不确定哪种方法是使用Java编程进行验证的有效且正确的方法
我考虑过像下面那样使用Hashmaps。
HashMap<String, String> stateMap = new HashMap<>();
stateMap.put("Wakeup", "get REady");
stateMap.put("get Ready", "Work");
并确认更改。
但这还有一个挑战,在我的实际问题中,对象可以从一种状态变为一种以上的状态,并且所有状态都是有效的。因此,我在这里停留在思考哪种方法是用Java做到这一点的正确方法?
答案 0 :(得分:0)
您可以创建一个这样的枚举:
public enum State {
WAKE_UP(Set.of(1)),
GET_READY(Set.of(2)),
WORK(Set.of(3, 4)), //multiple valid next states
EAT(Set.of(4)),
SLEEP(Set.of(0));
private Set<Integer> validNextStates;
State(Set<Integer> validNextStates) {
this.validNextStates = validNextStates;
}
public Set<State> getValidNextStates() {
return Arrays.stream(values())
.filter(state -> validNextStates.contains(state.ordinal()))
.collect(Collectors.toSet());
}
public boolean isValidNextState(State nextState) {
return getValidNextStates().contains(nextState);
}
}
然后像这样进行验证:
System.out.println(State.GET_READY.isValidNextState(State.WORK));
System.out.println(State.GET_READY.isValidNextState(State.EAT));
输出
true
false