我在初始化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编译器引起的吗?或者造成这种情况的原因是什么?
答案 0 :(得分:10)
我猜想在Netbeans中你使用的是Java 1.7,而在Linux上你使用的是Java 1.6。
“钻石操作员”仅在Java 7中引入。
使用javac -version
查看正在运行的编译器版本。
答案 1 :(得分:2)
如果使用Java 6,则需要在初始化时定义类型,如下所示:
scopeStack = new Stack<Scope>();
allScopes = new ArrayList<Scope>();
答案 2 :(得分: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>();
}
}