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

问题描述:

对于我来说这样做似乎太棘手。Cast TreeMap.Submap返回:SortedMap,返回TreeMap

我有一个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 

任何帮助将是伟大的。

问题正是错误所说的:返回的子图是而不是标准TreeMap,它是一个实现定义的内部类的实例。如果你看看subMap声明:

public SortedMap subMap(Object fromKey, Object toKey) 

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

这就是说,没有理由实际投到TreeMap,因为它没有提供任何额外的功能,比SortedMap做什么。

+0

我想简短答案是“否”,而较长的答案只是让你的代码意识到,如果它通过.submap发送一个TreeMap它应该准备处理SortedMap的返回? – 2010-11-22 00:30:36

+0

@jason m:这就是为什么通过接口处理对象总是好的,这样你就不用担心它是否真的是一个'TreeMap'或其他类。 – casablanca 2010-11-22 00:41:33

+0

你介意推荐我在哪里可以读到你在说什么(重新:通过接口处理对象?)那太棒了。谢谢! – 2010-11-22 00:45:46