我将老的Java代码来支持泛型和跨越这行代码试图投从会话中检索对象到传来一个TreeMap
:如何将会话对象转换为Map?
TreeMap allTransactions = (TreeMap) pageContext.getSession()
.getAttribute("allTransactions");
当我试图将其转换为特定类型:
TreeMap<String, MyDataBean> allTransactions = (TreeMap<String, MyDataBean>)
pageContext.getSession().getAttribute("allTransactions");
它给了我一个warning
:
Type safety: Unchecked cast from Object to TreeMap<String,MyDataBean>
在努力ŧ Ø摆脱完全警告,我写信给投它的方法来Map
:
public static <K,V> Map<K,V> castToMap(Class<? extends K> clazz1,
Class<? extends V> clazz2, Map<?,?> c) {
Map<K,V> map = new TreeMap<K,V>();
for (Map.Entry<?,?> entry : c.entrySet()) {
Object key = entry.getKey();
Object value = entry.getValue();
map.put(clazz1.cast(key), clazz2.cast(value));
}
return map;
}
真证:这时候,我修改了最初的代码来调用这个方法我没有得到任何错误:
Map<String, MyDataBean> allTransactions = MyUtilityClass.castToMap(String.class,
MyDataBean.class,
(Map<?,?>)pageContext.getSession().getAttribute("allTransactions"));
但我仍然不得不投它^^^在这里来调用我的功能。
问题1: 为什么当我仍在使用中投(Map<?,?>)
对我(TreeMap<String,MyDataBean>)
尝试过它不显示任何错误呢?
问题2: 我的应用程序被打破截至目前因为其他开发商还没有犯下的代码还没有,所以我没有立场来运行应用程序,并验证其正确性。任何人都可以通过观察它来判断,如果这个铸件的行为与以前一样?
我看不出添加该方法的意义。它没有实现任何具体。一个Map是一个Map,通用符号只是窗口修饰 - 可能在编写新代码时用作调试辅助工具,但当你知道代码的工作原理时,它就会阻碍你。 –
请注意,'TreeMap'有一个构造函数,它需要一张地图。所以你的演员可以简单地返回新的TreeMap(c);'http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html#TreeMap(java.util.Map) –
corsiKa
@HotLicks我不得不摆脱警告。你能否提出一个替代方案? – Prince