考虑到 Java 6,这里第 1 行和第 2 行的转换之间的 [实际] 区别是什么:
if (obj instanceof HashMap) {
HashMap meta = (HashMap) obj; // line 1, raw-type warnings
// vs
HashMap<?, ?> meta = (HashMap<?, ?>) obj; // line 2, no warnings
// ..
}
为什么有人会选择第 2 行(没有警告,类型安全),但似乎不能以有意义的方式使用转换的映射(即 put()/get()
) ?
最佳答案
HashMap
= HashMap<Object, Object>
!= HashMap<?, ?>
HashMap<?, ?> m1 = new HashMap<Object, Object>();
m1.put("foo", "bar"); // ERROR!!
HashMap<Object, Object> m2 = new HashMap<Object, Object>();
m2.put("foo", "bar"); // OK
HashMap m3 = new HashMap<Object, Object>();
m3.put("foo", "bar"); // WARNING (should be parameterized)
如果你打算只使用 HashMap.get()
不会有“实际”差异。
关于java - 以有用的方式转换 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20394902/