我正在用 Java 实现一个带有一堆目标的线性规划器。出于这个原因,我使用了一个堆栈,我需要在其中存储不同的对象:谓词、运算符、状态。为此,我创建了一个名为 Stackable 的接口,因此我有一个Stack<Stackable>
. 这个接口是空的,因为所有可堆叠的对象都没有任何共同点,除了它们都必须堆叠。
public Interface Stackable {
}
public class Predicate implements Stackable {
private String name;
private List<Parameter> params;
...
}
public class Operator implements Stackable {
private String name;
private List<Parameter> params;
private List<Predicate> preconditions;
private List<Predicate> adds;
private List<Predicate> deletes;
...
}
public class State implements Stackable {
private List<Predicate> preds;
...
}
由于我不喜欢空界面的想法,因此我开始阅读并遇到了Marker interface一词,我认为这是我的 Stackable 的情况。我也发现一般都可以用注解代替,但是我没用过,不知道能不能解决我的问题。
这就是为什么我想知道:
- 我的设计是否有更好的替代方案(通过使用注释或其他方式)?
- 如果在某些情况下标记接口仍然是一种解决方案,我如何区分何时应该使用它们?