JAVA-在成员枚举函数中更改非静态类字段

时间:2019-12-03 10:27:35

标签: java oop enums fsm

我正在尝试用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在编辑器中出现以下错误-无法静态引用非静态字段消息

1 个答案:

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