3

在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>

有人可以向我解释这种行为差异吗?谢谢。

4

2 回答 2

0

检查两个平台并确保在两个 IDE 中运行相同的 JDK 版本,这很可能是问题所在。

于 2013-11-14T15:11:31.033 回答
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);

这个小技巧会在编译器有机会对您使用它之前从右侧剥离所有泛型信息。

于 2013-11-14T15:12:29.050 回答