3

我在初始化 ArrayLists 时遇到问题。

当我使用 NetBeans 7.3 时,我尝试这样做:

protected Stack<Scope> scopeStack;
protected ArrayList<Scope> allScopes;
scopeStack = new Stack<>();
allScopes = new ArrayList<>();

该文件已完美编译并且运行良好。

但是当我切换到linux使用命令行编译java时。它给了我一个错误

src/SymbolTable.java:28: illegal start of type scopeStack = new Stack<>();      
SymbololTable.java:29: illegal start of type allScopes = new ArrayList<>();

这是由不同版本的java编译器引起的吗?或者是什么原因造成的?

4

3 回答 3

10

我猜想在 Netbeans 中您使用的是 Java 1.7,而在 Linux 中您使用的是 Java 1.6。

“钻石运算符”仅在 Java 7 中引入。

用于javac -version查看您正在运行的编译器版本。

于 2013-10-11T21:59:22.777 回答
2

如果您使用的是 Java 6,则需要在初始化时定义类型,如下所示:

scopeStack = new Stack<Scope>();
allScopes = new ArrayList<Scope>();
于 2013-10-11T21:59:14.907 回答
0

您应该在new调用中指定集合的​​类型,并在适当的位置初始化字段。尝试:

内联初始化字段

protected Stack<Scope> scopeStack = new Stack<Scope>();
protected ArrayList<Scope> allScopes = new ArrayList<Scope>();

在构造函数中初始化字段

public class MyClass {
  protected Stack<Scope> scopeStack;
  protected ArrayList<Scope> allScopes;

  public MyClass() {
    scopeStack = new Stack<Scope>();
    allScopes = new ArrayList<Scope>();
  }
}
于 2013-10-11T21:58:56.167 回答