在 Java 中对接口使用不同的枚举

Using different Enums with an Interface in Java

我目前正在研究爱因斯坦之谜。 对于那些不知道的人:https://udel.edu/~os/riddle.html 我必须实施一个 constraintSolver,我现在的任务是对谜语特定约束和问题本身进行建模,然后将问题放入其中。

我目前的计划是设置一个值,检查所有约束 - 如果它仍然一致,则继续,否则使用回溯并继续其他事情。

在我的回溯算法中,我只是遍历域列表,在其中遍历地址(索引),在其中遍历可能的特定于域的值。

然而,爱因斯坦谜语有 5 个领域:颜色、国籍、动物等

例如:(域只是一个空接口)

public enum Colors implements Domain{
    RED, BLUE, GREEN;
}

public enum Animals implements Domain{
    CAT, DOG, HORSE;
}

[...]
List<List<Domain>> domains = new ... ;
List<Colors> colors = ...
[...]
domains.add(colors)

我想,在我的回溯算法中使用这个变体我就不必关心特定域的类型了。 但是,我无法将颜色列表添加到域列表中。

我也尝试过使用通配符 - 但这也不起作用。 而且我真的不喜欢只使用字符串的想法。

有没有办法让它发挥作用? (如果我的总体想法很愚蠢,也请告诉我,但我的主要问题是,是否可以抽象枚举,以便可以将特定枚举的列表放入这些枚举的接口列表中。

感谢任何反馈:)

您只需将域声明更改为

List<List<? extends Domain>> domains = ...;

... 告诉编译器它是 Domain 的某个子类的列表列表。 Domain 对象列表应该允许插入任何 Domain 对象,而 Colors 列表只允许插入颜色...