首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在stateless4j触发器中发送参数

如何在stateless4j触发器中发送参数
EN

Stack Overflow用户
提问于 2014-03-04 19:23:47
回答 2查看 3K关注 0票数 4

我使用stateless4j作为我的应用程序的有限状态机库,但我不知道如何在触发触发器时使用参数。我有以下代码:

代码语言:javascript
复制
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_QUESTQUEST_ACCEPTED的转换创建一个参数。我尝试了以下几点:

代码语言:javascript
复制
TriggerWithParameters1<Quest, GameState, GameTrigger> twp = gameFSM.SetTriggerParameters(GameTrigger.QUEST_FOUND, Quest);

但是我不仅不知道以后如何使用这个触发器,而且我也不知道我用这个片段创建了什么。有人能告诉我如何使用参数(如gameFSM.trigger(GameTrigger.QUEST_FOUND, new Quest()); )来创建和触发触发器吗?谢谢!

奖励:为什么StateMachine类中的每个方法都会抛出可疑的、毫无头绪的Exception?我觉得这个图书馆很流畅,但使用起来却很糟糕。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-31 21:34:11

看来你遇到了和我一样的挫折。通过执行以下操作,我能够传递参数:

代码语言:javascript
复制
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);

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

票数 4
EN

Stack Overflow用户

发布于 2020-12-09 17:38:28

如果使用permitDynamic窗体代替permit,则可以使用参数化操作。

代码语言:javascript
复制
TriggerWithParameters1 twp = sm.setTriggerParameters(Trigger.D, java.util.Map.class);
sm.configure(State.D)
    .permitDynamic(
        twp,
        (m) -> State.A, 
        (m) -> System.out.println(m.toString())
    );

Map data = new HashMap();
data.put("a", "1");
sm.fire(twp, data);

缺点是您失去了生成点图输出的能力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22181068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档