【发布时间】:2015-04-08 16:48:45
【问题描述】:
结构是这样的:
public interface ItemList{ }
public enum ItemList1 implements ItemList {
Apple,
Orange;
}
public enum ItemList2 implements ItemList {
Banana,
Grapes;
}
还有 5 个这样的枚举
要求是在地图中使用这些枚举作为键,在这些地图中,我将键设置为:
public Class SomeClass {
private Map<ItemList, OtherObject> objectList;
//other code
}
进入地图的 ItemList 是在运行时决定的。而且我需要使用像 TreeMap 这样的排序 Map 来进行其他操作。 因此,TreeMap 显然无法比较键枚举,因为我已将它们声明为 ItemList 超类型。
所以,我搜索了其他问题并做了类似的事情,以便枚举可以使用他们的 compareTo 方法:
public interface ItemList<SelfType extends ItemList<SelfType>> extends Comparable<SelfType>{ }
public enum ItemList1 implements ItemList<SelfType> {
//enum values
}
但这并不能解决问题。当我尝试检索将我的枚举作为键的 TreeMap 时,我仍然得到相同的“ClassCastException”。
如果我在这里做错了什么,请提出建议,或者有什么其他方法可以解决这个目的?
编辑: 链接到我遵循的解决方案,但它不起作用: How to implement an interface with an enum, where the interface extends Comparable?
编辑 2 发现问题。对不起大家。 我的地图被填充了不同类型的枚举作为键,当所有键都应该属于相同类型才能进行排序时。
【问题讨论】:
-
我不明白为什么地图无法对键进行排序。只要它只包含 ItemList1 的实例,或只包含 ItemList2 的实例,一切都应该正常工作。而且从你的描述来看,好像是这样的。
-
您不能将来自两个不同枚举的常量作为键放在一个
TreeMap中。基本上你无法比较它们。 -
@JBNizet 是的,同样的事情困扰着我。我检查了很多次。我关注了这个问题的答案stackoverflow.com/questions/7160980/…
-
@RohitJain 地图只填充了一种类型的列表。但是,它将填充哪个枚举是在运行时决定的。
-
@AnmolGupta 那你就得不到
ClassCastException。
标签: java interface enums comparable