Структурата е следната:
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 за други операции. И така, TreeMap не може да сравни ключовите enum-и, очевидно защото съм ги декларирал като супертип ItemList.
И така, потърсих други въпроси и направих нещо подобно, така че enum-ите да могат да използват своя метод compareTo:
public interface ItemList<SelfType extends ItemList<SelfType>> extends Comparable<SelfType>{ }
public enum ItemList1 implements ItemList<SelfType> {
//enum values
}
Но това не решава проблема. Все още получавам същото „ClassCastException“, когато се опитах да извлека TreeMap, който имаше моите enum като ключове.
Моля, предложете дали правя нещо нередно тук или какъв може да бъде друг начин за разрешаване на тази цел?
РЕДАКТИРАНЕ: Връзка към решението, което последвах, но не работи: Как да имплементирам интерфейс с enum, където интерфейсът разширява Comparable?
РЕДАКТИРАНЕ 2 Установен проблем. Съжалявам момчета. Моята карта се попълваше с различни типове enum като ключове, когато всички ключове трябва да принадлежат към един и същи тип, за да работи сортирането.
TreeMap
като ключове. По принцип не можете да ги сравнявате. - person Rohit Jain   schedule 08.04.2015ClassCastException
. - person Rohit Jain   schedule 08.04.2015