2010-11-22 34 views
0

對於我來說這樣做似乎太棘手。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 

任何幫助將是偉大的。

回答

3

問題正是錯誤所說的:返回的子圖是而不是標準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