在 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
列表只允许插入颜色...
我目前正在研究爱因斯坦之谜。 对于那些不知道的人: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
列表只允许插入颜色...