【问题标题】:JAVA - Changing non static Class Field in Member Enum's FunctionJAVA - 更改成员枚举函数中的非静态类字段
【发布时间】:2020-03-28 00:17:33
【问题描述】:

我正在尝试用 Java 实现 FSM。 我有一个 FSM 类,它有一个字符串字段消息和一个 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() 中访问字符串消息(我的类 fsmBot 的一个字段)时出现错误。我可以通过将消息设为静态来使其工作,但我需要运行此 fsmBot 类的多个实例。 有没有办法做到这一点?

*编辑1- Eclipse 在编辑器中给出以下错误 - 无法对非静态字段消息进行静态引用

【问题讨论】:

  • 枚举是静态的

标签: java oop enums fsm


【解决方案1】:

enums 是静态类,所以你可以这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多