Java 定义具有n个状态的FSM的状态。(爪哇)
我以前从未使用过enum State,最近也遇到过它,我发现要定义一个FSM,其中程序员知道状态,代码是这样的: 枚举状态{state0,state1,state2}//由程序员定义的具有3种状态的状态机示例Java 定义具有n个状态的FSM的状态。(爪哇),java,enums,state,Java,Enums,State,我以前从未使用过enum State,最近也遇到过它,我发现要定义一个FSM,其中程序员知道状态,代码是这样的: 枚举状态{state0,state1,state2}//由程序员定义的具有3种状态的状态机示例 但我希望能够定义一个FSM,其中用户决定有多少个状态以及有什么状态,有什么方法可以做到这一点吗?这里不能使用具有固定大小的枚举,但我想您可以这样做: public class StateMachine { // it is up to you to define what a St
但我希望能够定义一个FSM,其中用户决定有多少个状态以及有什么状态,有什么方法可以做到这一点吗?这里不能使用具有固定大小的枚举,但我想您可以这样做:
public class StateMachine {
// it is up to you to define what a State and a Transition are
private Set<State> possibleStates;
private Set<Transition> transitions;
private State currentState;
// methods for adding and removing states
// ...
// methods for adding and removing transitions
// ...
}
公共类状态机{
//由您定义什么是状态和转换
私人设定可能的不动产;
私有集转换;
私人国家;
//添加和删除状态的方法
// ...
//添加和删除转换的方法
// ...
}
不幸的是,没有很好的方法来创建运行时枚举。但是,还有一些其他选择:
hashmap只有当您知道将有多少个状态时才使用enum。您可以创建某种类型的StateMachineBuilder
,它接受状态和转换表,但在解耦时可能会变得有点复杂。如果我是你,我会创建某种类型的TransitionTable
类,将状态添加到其中,然后指定状态之间的转换,然后将其添加到基于转换表工作的通用有限状态机中。这只是我的观点,虽然我有一个转换表(存储为带字符串的2D arraylist),我可以在其中添加行+列(状态),单元格nxm将是我存储转换标签的地方,但我也有一系列用于此表的add/get/set方法。我无法将其转换为状态机:/我试着做一些可能的事情;但它似乎不起作用…?不清楚,到底是什么不起作用?在集合上调用方法并不难…抱歉,第一次使用集合和状态。集合像列表吗?我应该在.add方法参数中添加什么类型的内容?状态。新?请查看文档。在集合
中,应该添加T
值。但是,如果用户可以自己定义状态,那么您不太可能编写类似于State.NEW
(即编译时已知的枚举)的内容<代码>状态
通常会包装一些字符串
或其他描述当前状态的类型
HashMap<State, Function<State, State> stateTransitions;