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
做什么。
我想简短答案是“否”,而较长的答案只是让你的代码意识到,如果它通过.submap发送一个TreeMap它应该准备处理SortedMap的返回? – 2010-11-22 00:30:36
@jason m:这就是为什么通过接口处理对象总是好的,这样你就不用担心它是否真的是一个'TreeMap'或其他类。 – casablanca 2010-11-22 00:41:33
你介意推荐我在哪里可以读到你在说什么(重新:通过接口处理对象?)那太棒了。谢谢! – 2010-11-22 00:45:46