JAVA - 更改成员枚举函数中的非静态 Class 字段
JAVA - Changing non static Class Field in Member Enum's Function
我正在尝试在 Java 中实现 FSM。
我有一个 FSM Class,它有一个字符串字段消息和一个用于管理机器人状态的枚举。
这是示例代码。
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() 中访问字符串消息(我的 class fsmBot 的一个字段)时,这里出现错误。我可以通过使消息静态化来让它工作,但我需要这个 fsmBot class 运行 的多个实例。
有什么办法吗?
*编辑1-
Eclipse 在编辑器中给出以下错误 - 无法对非静态字段 message
进行静态引用
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();
}
}
我正在尝试在 Java 中实现 FSM。 我有一个 FSM Class,它有一个字符串字段消息和一个用于管理机器人状态的枚举。 这是示例代码。
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() 中访问字符串消息(我的 class fsmBot 的一个字段)时,这里出现错误。我可以通过使消息静态化来让它工作,但我需要这个 fsmBot class 运行 的多个实例。 有什么办法吗?
*编辑1- Eclipse 在编辑器中给出以下错误 - 无法对非静态字段 message
进行静态引用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();
}
}