将多个优先级设置为Enum|JAVA



我的状态流如下所示。其中,A、B、C、D、X是用作枚举的状态。

A -> B -> C -> D -> E
A -> X  
B -> X
C -> X
D -> X

箭头表示状态是可访问的。即A->X表示A可以达到X,但不能反过来。我的实施方式是:

public enum States{
A(0), B(1), C(2), D(3);
private int priority;
…
}

存在一个浮动状态X,它可以从a、B、C和D到达。我想按照上面的方式设置X的优先级。有办法做到这一点吗?i、 e。将多个优先级设置为单个枚举。

我建议您实际使用引用,而不是使用整数来定义图,尤其是如果它是单向的。

然而,由于枚举值只能引用其构造函数中已经存在的值,因此您必须向后声明依赖项,或者使用初始值设定项块。

";向后":

//backwards dependency
enum State {
A,
B(A),
C(B),
D(C),
X(A,B,C,D);
private List<State> successors = new ArrayList<>();
private State(State... predecessors) {
Arrays.stream(predecessors).forEach(p -> p.successors.add(this));
}
...
}
//backwards declaration
enum State {
X,
D(X),
C(D,X),
B(C,X),
A(B,X);
private List<State> successors;
private State(State... successors ) {
this.successors = List.of(successors);
}
...
}

静态初始值设定项

enum State {
A,B,C,D,X;
private List<State> successors = new ArrayList<>();
static {
A.successors.addAll(List.of(B,X));
B.successors.addAll(List.of(C,X));
C.successors.addAll(List.of(D,X));
D.successors.addAll(List.of(X));
}
...
}

如果X不是枚举的一部分,则需要定义一个公共接口并将其用作successors的类型。

最新更新