0

很抱歉,我对 Java 不是很有经验。我正在使用 Eclipse 作为 IDE。Eclispe 抱怨我无法理解的未经检查的演员表。请参考代码片段。一般如何做到这一点?

public Liberty2Server(ArrayList<Map<String,String>> libertySourceFiles , String basePath) throws FileNotFoundException , IllegalArgumentException {
    // check input file path
    for( Object map : libertySourceFiles) {
        Map<String,String> mp = (Map<String,String>) map ;  // <==Eclipse complains here: Unchecked cast from Object to Map<String,String>

欢迎任何提示

罗尔夫

4

4 回答 4

3

您可以更改 for 循环并使用集合中的显式类型:

for(Map<String,String> map : libertySourceFiles) {
    Map<String,String> mp = map; //probably not needed any more
}
于 2013-02-05T10:19:36.290 回答
2

这意味着您正在执行编译器无法检查是否安全的强制转换。

它警告您必须检查它是否安全。

更好的解决方案是通过使用消除对演员表的需要

for(Map<String, String> mp : libertySourceFiles) {
于 2013-02-05T10:20:59.647 回答
0

Eclipse 抱怨,因为你想将Object一个Map<String, String>. 将运行变量的类型更改mapMap<String, String>,一切都会好起来的。那时你甚至不需要这个变量mp

于 2013-02-05T10:21:34.433 回答
0

这里的问题是您向上转换ArrayList<Map<String,String>>元素 doObject然后将其向下转换为泛型类型。解决方案很简单:

public Liberty2Server(ArrayList<Map<String,String>> libertySourceFiles , String basePath) throws FileNotFoundException , IllegalArgumentException {
    // check input file path
    for(  Map<String,String> mp : libertySourceFiles) {
      //  Map<String,String> mp = (Map<String,String>) map ; Not needed anymore
      ....
于 2013-02-05T10:22:10.403 回答