2010-11-22 6 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の戻り値を処理する準備ができているということを意識してコードを作成するだけです。 –

+0

@jason m:だからこそ、それは本当に 'TreeMap'なのか別のクラスなのか心配する必要はありません。 – casablanca

+0

あなたは何を言っているのかを読んでもいいでしょうか(インターフェースを通してオブジェクトを扱っていますか?)それは素晴らしいことでしょう。ありがとう! –