Приведение TreeMap.Submap возвращает: SortedMap обратно в TreeMap - PullRequest
0 голосов
/ 22 ноября 2010

Это кажется слишком сложным для меня, чтобы делать это правильно.

У меня есть TreeMap<Double, (user-defined)Object>, из которого я беру подкарту:

        public static reqObj assignObj(reqObj vArg, int startDate, int endDate){
                reqObj vOut=new reqObj();



                if (keyAt(vArg.requestObject,startDate)>-1 && keyAt(vArg.requestObject,endDate)>-1){
                    System.err.println(keyAt(vArg.requestObject,startDate));
                    System.err.println(keyAt(vArg.requestObject,endDate));

                    //vOut.requestObject=(TreeMap<Double, dayObj>)

                    vArg.requestObject.subMap(
                            keyAt(vArg.requestObject,startDate),
                            keyAt(vArg.requestObject,endDate));

                }

                return vOut;
        } 

Это работает так, как ожидалось, но когда я возвращаюсь к своей отсортированной карте обратно к (TreeMap), я получаю следующую ошибку:

  java.lang.ClassCastException: java.util.TreeMap$SubMap

Любая помощь будет отличной.

1 Ответ

3 голосов
/ 22 ноября 2010

Проблема именно в том, что говорит ошибка: возвращаемая подкарта , а не стандарт TreeMap, это экземпляр внутреннего класса, определенного реализацией.Если вы посмотрите на объявление subMap:

public SortedMap subMap(Object fromKey, Object toKey)

, все, что он гарантирует, это то, что возвращаемый объект реализует интерфейс SortedMap, так что это единственное, что вы можете безопасно привести к.

При этом нет никакой причины фактически приводить к TreeMap, потому что он не предоставляет никаких дополнительных функций по сравнению с тем, что делает SortedMap.

...