Pergunta

Isso parece complicado demais para eu fazer isso corretamente.

eu tenho um TreeMap<Double, (user-defined)Object>, do qual estou levando um metrô:

        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;
        } 

Isso funciona exatamente como o esperado, mas quando eu for lançado meu mapa classificado de volta para (TreeMap) Estou tendo o erro a seguir:

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

Qualquer ajuda seria ótimo.

Foi útil?

Solução

O problema é exatamente o que o erro diz: o submarino retornado é não um padrão TreeMap, é uma instância de uma classe interna definida por implementação. Se você olhar para a declaração de subMap:

public SortedMap subMap(Object fromKey, Object toKey)

Tudo o que garante é que o objeto retornado implemente o SortedMap Interface, então essa é a única coisa que você pode lançar com segurança.

Dito isto, não há razão para realmente lançar para um TreeMap porque não fornece nenhuma funcionalidade adicional sobre o que um SortedMap faz.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top