代码之家  ›  专栏  ›  技术社区  ›  jason m

Cast TreeMap.Submap返回:SortedMap,返回TreeMap

  •  0
  • jason m  · 技术社区  · 14 年前

    这对我来说太棘手了,我做不好。

    我有一个 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 回复  |  直到 14 年前
        1
  •  3
  •   casablanca    14 年前

    问题正是错误所说的:返回的submap是 标准 TreeMap ,它是实现定义的内部类的实例。如果你看一下 subMap :

    public SortedMap subMap(Object fromKey, Object toKey)
    

    它只保证返回的对象实现 SortedMap 接口,所以这是唯一可以安全地转换到的对象。

    也就是说,没有理由真的投到 树图 因为它不提供任何附加功能 分类地图 做。