2013-10-11 4 views
3

У меня проблема с инициализацией ArrayLists.ошибка инициализации arraylist

Когда я использовал 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-компилятора? Или в чем причина этого?

+3

Это ошибка Java 1.7 против 1.6 - 1.6 не имеет синтаксиса типового вывода <> "diamond". –

+0

Я думаю, что вы правы. Это ошибка версии. Благодаря! –

ответ

10

Я бы предположил, что в Netbeans вы используете Java 1.7, а в Linux вы используете Java 1.6.

«Алмазный оператор» был введен только в Java 7.

Используйте javac -version, чтобы увидеть, какую версию компилятора вашего бегущего.

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>(); 
    } 
} 
+0

Не относится к его проблеме, неверно в отношении нового символа '<>' нового синтаксиса Java 7. Я бы согласился с инициализацией в объявлении или конструкторе. –

2

Вы должны определить тип при инициализации, если вы используете Java 6 , например:

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

В java 7 оператор описания типа «

+0

@ThomasW Ну, во-первых, мы не знаем, что он использует Java 7, и если он этого не сделает, ему придется это сделать. Я не понимаю нисходящего. Если он перейдет с Java 7 на Java 6, тогда он должен будет указать тип ... Я не думаю, что это должно быть downvote. – BlackHatSamurai

+0

Я взял его, используя синтаксис Java 7, он использовал Java 7 (в поле, которое работало). См. Http://docs.oracle.com/javase/tutorial/java/generics/types.html#diamond и http://stackoverflow.com/questions/4166966/what-is-the-point-of-the-diamond -оператор-в-java-7 для обсуждения этого нового синтаксиса. –

Смежные вопросы