考虑一下我想用作状态机的这个枚举:
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;
}
}
目的是避免所有状态必须实现所有事件,除了返回当前状态外,它们不执行任何操作。
在此示例中,
processBar
和State1
应该忽略对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