考虑一下我想用作状态机的这个枚举:

public enum PositionFSM {

  State1 {
    @Override
    PositionFSM processFoo() {
      return State2;
    }
  },
  State2 {
    @Override
    PositionFSM processFoo() {
      return State1;
    }
  };

  abstract PositionFSM processFoo();

  abstract PositionFSM processBar();

  PositionFSM processBar() {
    return this;
  }
}


目的是避免所有状态必须实现所有事件,除了返回当前状态外,它们不执行任何操作。

在此示例中,processBarState1应该忽略对State2的调用。

我指的是answer,但是给定的枚举无法编译(Java 1.8)。
有没有一种方法可以按照我想要的方式进行?

最佳答案

您需要先定义枚举变量,然后再定义方法(我不知道为什么链接的答案反之亦然,这在Java中从未起作用)。另外,不要使方法抽象,因此您可以提供默认的实现:

public enum State
{
    State1
    {
        @Override
        public State process()
        {
            return State2;
        }
    },
    State2,
    State3;

    public State process()
    {
        return this;
    }
}


要测试它:

System.out.println(State.State1.process());
System.out.println(State.State2.process());
System.out.println(State.State3.process());


产生以下输出:

State2
State2
State3

10-08 18:46