Java程序可以正常运行,但无法编译

4

我有一个正常运行的Java程序。

但是当我尝试在Netbeans中清理和构建它时,它卡在这一行:

 protected HashMap<String, ArrayList<HashMap<String,String>>> config1

 config1 = new <String,ArrayList<HashMap<String,String>>> HashMap(); // build breaks here.

错误信息为:
  cannot find symbol  
  symbol  : constructor     
  <java.lang.String,java.util.ArrayList<java.util.HashMap<java.lang.String,java.lang.String>>
  >HashMap()

你是否导入了适当的类? - Kneel-Before-ZOD
引用的源代码不可能编译通过,因此运行的版本必须来自于源代码的另一个版本。它是否在修订控制下? - Patricia Shanahan
3个回答

5
您将类型参数放在了错误的位置。它应该出现在 HashMap() 之间:-
config1 = new HashMap<String,ArrayList<HashMap<String,String>>>();

此外,声明时更好使用通用类型而非具体类型,包括在泛型类型参数中。所以在声明中应该使用Map而不是HashMap,在类型参数中使用List而不是ArrayList:-
实际上,您不需要将声明和初始化分为两行。只需将它们放在一行即可。这看起来更加清晰。因此,您可以将这两行代码改为:-
protected Map<String, List<Map<String,String>>> config1 = 
                               new HashMap<String, List<Map<String,String>>>();

4

在泛型之前必须放置类名。

config1 = new HashMap<String,ArrayList<HashMap<String,String>>>();

2

泛型应该跟随类名。它不应该在类名之前使用。请将您的第二行更正如下:

      protected HashMap<String, ArrayList<HashMap<String,String>>> config1;

      config1 = new HashMap <String,ArrayList<HashMap<String,String>>>();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接