gpt4 book ai didi

java - 如何验证 java 对象从一种状态到另一种状态的转换[两种状态都是用户定义的]?

转载 作者:行者123 更新时间:2023-12-02 03:03:55 26 4
gpt4 key购买 nike

我有一个java对象,它可以转换为用户定义的不同状态。但这些转变应该按顺序发生。我可以通过哪些方式验证状态更改?

州:

醒来,做好准备,工作,吃, sleep

对象可以有以下状态,但它应该遵循顺序。对象可以从唤醒状态进入准备状态,但不能开始工作。

我尝试使用 HashMap 和数组,但不确定哪种是使用 Java 编程验证这一点的有效且正确的方法

我考虑过使用如下所示的 HashMap 。

HashMap<String, String> stateMap = new HashMap<>();
stateMap.put("Wakeup", "get REady");
stateMap.put("get Ready", "Work");

并验证更改。

但这还有一个挑战,在我的实际问题中,对象可以从一种状态变为多种状态,并且所有状态都是有效的。所以我被困在这里思考在 Java 中执行此操作的正确方法是什么?

最佳答案

您可以像这样创建一个枚举:

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

关于java - 如何验证 java 对象从一种状态到另一种状态的转换[两种状态都是用户定义的]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57033277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com