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