这个问题关于Java中的gernerics,type-safty和Collection类:
正如标题所说:我有一个返回集合SortedMap<String,String>
的方法,我将其从methodStrStr()
作为返回值检索。假设我从methodStrSer()
调用此方法,只需要传递检索到的地图,但必须返回SortedMap<String,Serializable>
。
这样做的优雅计算方法是什么?
如果没有泛型,我会返回原始地图,String
为Serializable
。但是我发现如果SortedMap
的底层实现特定于String
个对象,我可能会在运行时遇到麻烦,如果我想添加一个不同的类型对象,例如{{1 }}也是Boolean
但不是Serializable
。所以我知道有意义的是,编译器不允许将String
作为SortedMap<String,String>
返回。
然而,问题仍然存在。是否有一种可接受的方式来进行somhow&#34;转换&#34; (即一种不将 O(N)时间)原始地图类型转换为目标类型的方式?
答案 0 :(得分:3)
有几种选择:
SortedMap<String, ? extends Serializable>
(另请参阅What is PECS (Producer Extends Consumer Super)?)后者可能是最合适的。你可以简单地写
SortedMap<String, String> oldMap = ...;
SortedMap<String, Serializable> newMap =
Collections.<String, Serializable>unmodifiableSortedMap(oldMap);
这是安全的,因为地图是不可修改的,因此不能被污染&#34; Serializable
对象不是String
。 (一个简单的强制转换,产生一个可修改的映射,当然不是类型安全的 - 请参阅this answer以获取示例)。