java-如何在stateless4j触发器中发送参数

我将stateless4j用作应用程序的有限状态机库,但无法理解触发触发器时如何使用参数.我有以下代码:

gameFSM.Configure(GameState.LOOKING_FOR_A_QUEST)
    .OnEntry(Actions.lookForQuest)
    .Permit(GameTrigger.QUEST_FOUND, GameState.JUDGING_QUEST);

gameFSM.Configure(GameState.JUDGING_QUEST)
    .OnEntry(Actions.judgeQuest)
    .Permit(GameTrigger.QUEST_ACCEPTED, GameState.INACTIVE) /* test */
    .Permit(GameTrigger.QUEST_DENIED, GameState.LOOKING_FOR_A_QUEST);

gameFSM.Configure(GameState.INACTIVE)
    .Permit(GameTrigger.START_LOOKING_FOR_QUESTS, GameState.LOOKING_FOR_A_QUEST);

现在,我试图为从LOOKING_FOR_A_QUEST到QUEST_ACCEPTED的过渡创建一个参数.我尝试了以下方法:

TriggerWithParameters1<Quest, GameState, GameTrigger> twp = gameFSM.SetTriggerParameters(GameTrigger.QUEST_FOUND, Quest);

但是我不仅不知道以后如何触发该触发器,而且我也不清楚如何使用该片段创建内容.有人可以告诉我如何继续创建和触发带有参数的触发器,例如gameFSM.trigger(GameTrigger.QUEST_FOUND,new Quest());吗?谢谢!

奖励:为什么StateMachine类中的每个方法都可以引发可疑且毫无头绪的Exception?我觉得这个库很流畅,但使用起来却很糟糕.有什么建议吗?

解决方法:

看起来您遇到了和我一样的挫败感.通过执行以下操作,我可以传递参数:

TriggerWithParameters1 twp = sm.setTriggerParameters(Trigger.D, java.util.Map.class);
sm.configure(State.D).permit(Trigger.A, State.A)
                     .onEntryFrom( twp, new Action1<Map>(){ 
                                            public void doIt(Map m) {
                                               System.out.println(m.toString());
                                            }
                                        }, Map.class);
Map data = new HashMap();
data.put("a", "1");
sm.fire(twp, data);

这种方法似乎过于复杂,但确实有效.

上一篇:在php页面中创建触发器后,是否需要在Mysql中创建触发器?


下一篇:mysql使用触发器设置最大行数