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();
    }
}