我正在尝试用Java实现FSM。 我有一个FSM类,其中包含一个String字段消息,以及一个用于管理机器人状态的ENUM。 这是示例代码。
public class fsmBot
{
public String message;
public enum BotStates
{
greeting
{
@Override
public void message()
{
message = "Hi";
}
@Override
public String nextState()
{
String nxtState = BotStates.state1.name();
return nxtState;
}
},
state1
{
@Override
public void message()
{
fsmApplyLeave.message = "How are you?";
}
@Override
public String nextState()
{
String nxtState = BotStates.state1.name();
return nxtState;
}
};
}
}
但是,当我在枚举BotStates的函数greeting()中访问String消息(类fsmBot的一个字段)时,出现了错误。我可以通过使消息静态化来使其工作,但是我需要运行此fsmBot类的多个实例。 有什么办法吗?
*编辑1- Eclipse在编辑器中出现以下错误-无法静态引用非静态字段消息
答案 0 :(得分:0)
enum
是静态类,因此您可以执行以下操作:
public class fsmBot
{
public String message;
public enum BotStates
{
greeting
{
@Override
public void message(fsmBot bot)
{
bot.message = "Hi";
}
@Override
public String nextState()
{
String nxtState = state1.name();
return nxtState;
}
},
state1
{
@Override
public void message(fsmBot bot)
{
bot.message = "How are you?";
}
@Override
public String nextState()
{
String nxtState = state1.name();
return nxtState;
}
};
public abstract void message(fsmBot bot);
public abstract String nextState();
}
}