我有以下代码行显示以下警告:
HashMap<String,String> currentItem = (HashMap<String,String>) adapter.getItemAtPosition(position);
// Warning: Type Safety: Unckecked cast from Object to HashMap <String,String>
我怎样摆脱这个警告?
答案 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)
您可以在编译器首选项中禁用此警告,请参阅图片..
答案 4 :(得分:0)
如果getter返回Object
因为它的泛型,那么你应该验证它确实包含字符串值。
您可以使用选中的地图强制执行合同:
Map<String, String> currentItem = Collections.checkedMap(
adapter.itemAtPosition(position), String.class, String.class);