Java 用道具初始化演员
我有以下FSMJava 用道具初始化演员,java,akka,actor,Java,Akka,Actor,我有以下FSM public class ActorOnFsm { public static enum State { FirstState, SecondState, ThirdState, FourthState } public static final class ServiceData { } public class ActorFSM extends AbstractFSM<State, Serv
public class ActorOnFsm {
public static enum State {
FirstState,
SecondState,
ThirdState,
FourthState
}
public static final class ServiceData {
}
public class ActorFSM extends AbstractFSM<State, ServiceData> {
{
startWith(FirstState, new ServiceData());
when(FirstState,
matchEvent(SomeMessage.class,
ServiceData.class,
(powerOn, noData) ->
goTo(SecondState)
.replying(SecondState))
);
when(SecondState,
matchEvent(SomeOtherMessage.class,
ServiceData.class,
(powerOn, noData) ->
goTo(ThirdState)
.replying(ThirdState))
);
when(FirstState,
matchEvent(soemErrorMessage.class,
ServiceData.class,
(powerOn, noData) ->
goTo(FourthState)
.replying(FourthState))
);
initialize();
}
}
}
初始化此参与者的正确方法是什么
我还尝试更改类以扩展AbstractLogging,但结果相同
我还尝试创建一个空构造函数,但结果相同
尝试在道具中发送状态和数据,但仍然收到相同的错误
final Props props = Props.create(DeployerOnFsm.class, state, data);
您应该传递给
Props
工厂的类是ActorFSM
,它在ActorOnFsm
中定义:
final Props props = Props.create(ActorOnFsm.ActorFSM.class);
但是,将内部类传递给Props
工厂可能会出现问题。将ActorFSM
作为顶级类更为传统,在这种情况下,对Props
的调用将更改为:
final Props props = Props.create(ActorFSM.class);
此外,您的状态转换中似乎有一个输入错误:
when(FirstState,
matchEvent(soemErrorMessage.class,
// ^
想必,您打算编写
SomeErrorMessage.class
而不是soemErrorMessage.class
非常感谢!!!但我仍然有另一个问题,它在“类中找不到匹配的构造函数”时出错。它需要显式构造函数吗?事实证明,将类移到嵌套类之外修复了它
when(FirstState,
matchEvent(soemErrorMessage.class,
// ^