Java - 摆脱编译器警告?

时间:2011-03-16 22:28:02

标签: java eclipse casting warnings hashmap

我有以下代码行显示以下警告:

HashMap<String,String> currentItem = (HashMap<String,String>) adapter.getItemAtPosition(position);
// Warning: Type Safety: Unckecked cast from Object to HashMap <String,String>

我怎样摆脱这个警告?

5 个答案:

答案 0 :(得分:4)

getItemAtPosition方法返回一个通用的HashMap,因此您不必强制转换它。或者使用适当的注释 - @SuppressWarnings(“unchecked”)

答案 1 :(得分:3)

您可以在声明前的行上使用@SuppressWarnings("unchecked")注释来禁止它:

@SuppressWarnings("unchecked")
HashMap<String,String> currentItem = (HashMap<String,String>) adapter.getItemAtPosition(position);
// Warning: Type Safety: Unckecked cast from Object to HashMap <String,String>

如果你这样做,你应该添加一个注释,说明为什么将它转换为字符串到字符串的地图是类型安全的。

或者,如果您只是从地图上阅读,则可以将其投射到HashMap<?, ?>并使用instanceof检查您从地图中获取的对象的类型。

答案 2 :(得分:1)

您可以使用SuppressWarnings注释。

http://download.oracle.com/javase/1.5.0/docs/api/java/lang/SuppressWarnings.html

但我不鼓励你这样做,如果你有权访问adapter并可以重构它,利用Java泛型并返回正确的类型。

答案 3 :(得分:1)

您可以在编译器首选项中禁用此警告,请参阅图片..

enter image description here

答案 4 :(得分:0)

如果getter返回Object因为它的泛型,那么你应该验证它确实包含字符串值。

您可以使用选中的地图强制执行合同:

Map<String, String> currentItem = Collections.checkedMap(
     adapter.itemAtPosition(position), String.class, String.class);

请参阅http://download.oracle.com/javase/6/docs/api/java/util/Collections.html#checkedMap%28java.util.Map,%20java.lang.Class,%20java.lang.Class%29