在eclipse中,这行代码编译并且程序运行正常。
SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(), (List<? extends Map<String, ?>>) data, R.layout.message_list_item, from, to);
它发出警告:
unchecked cast from ArrayList<Map> to List<? extends Map<String, ?>>
然而,在netbeans中:
Incompatible types: ArrayList<Map> cannot be converted to List<? extends Map<String, ?>>
然后是运行时错误:
error: inconvertible types
SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(), (List<? extends Map<String, ?>>) data, R.layout.message_list_item, from, to);
required: List<? extends Map<String,?>>
found: ArrayList<Map>
有人可以向我解释这种行为差异吗?感谢。
答案 0 :(得分:0)
检查两个平台并确保在两个IDE中都运行相同的JDK版本,这很可能是问题所在。
答案 1 :(得分:0)
Eclipse拥有自己的Java编译器,而Netbeans使用JDK中的编译器。它们是兼容的并且都产生有效的代码但是对于一些不起眼的特征(特别是在泛型领域),它们不是100%兼容的。大多数情况下,Eclipse编译器将能够处理更复杂的情况。
尝试安装Java 7并将其用于Netbeans。 Oracle修复了编译器中的一些错误。
编辑再次查看问题后,我发现了一个问题:您正在混合通用和原始类型:您尝试将Map
投射到Map<String,?>
。
在声明data
而不是ArrayList<Map>
时尝试使用通用类型。如果这不起作用,那么您可以使用此解决方法:
@SuppressWarnings( { "unchecked", "rawtypes" } )
java.util.List<? extends Map<String, ?>> tmp = (java.util.List<? extends Map<String, ?>>)((List) data);
这个小技巧会在编译器有机会对你使用它之前从右侧删除所有泛型信息。