2014-01-11 4 views
-1

Итак, у меня есть класс, который содержит arraylist и 2-й класс, который определяет объект. У меня есть 3-й класс, который создает экземпляр 1-го раза, а затем создает второй экземпляр 1-го числа в качестве параметра - каждый раз, когда экземпляр второго экземпляра создается, он должен вызвать метод 1-го, чтобы добавить себя в arraylist.Вызов метода из другого класса - дающая синтаксическую ошибку

Я получаю сообщение об ошибке, вызвав метод 1-й, хотя говорящей синтаксической ошибки на токене, неуместной конструкции. Мой код:

первый класс:

public class One { 

private ArrayList<Two> list; 

One(){list = new ArrayList<Two>();} 

public void add(Two TwoInstance){ 
    list.add(TwoInstance); 
} 
} 

второй класс:

public class Two { 

private String a = null; 
private String b = null; 
private long c = 0; 
private int d = 0; 
private int e = 0; 
private One OneInstance; 

Two(One oneInstance, String a, String b, long c, int d, int e) 
{this.oneInstance = oneInstance; this.a = a; this.b = b; this.c = c; this.d = d; this.e = e;} 

oneInstance.add(this); 
} 
+0

Почему downvote? – db579

+0

Ваш код не будет компилироваться, потому что он имеет хотя бы одну ошибку компилятора «частный OneInstance» против «this.oneInstance» (верхний и нижний регистр) – Ralph

+0

Ах достаточно справедливо - переименовал переменные, чтобы попытаться сделать его более читаемым, но явно пропустил это. – db579

ответ

3

Ошибка происходит потому, что вы закрыли свой конструктор, как упомянуто здесь (проверьте фигурные скобки)

Two(One oneInstance, String a, String b, long c, int d, int e) 
{this.oneInstance = oneInstance; this.a = a; this.b = b; this.c = c; this.d = d; this.e = e;} 

и исполняемый код вне блока/метода/конструкторы не допускаются, поэтому эта строка

oneInstance.add(this); 

высказать свое мнение. Переместить выше строку в конструкторе следующим образом:

Two(One oneInstance, String a, String b, long c, int d, int e) 
{ 
    this.oneInstance = oneInstance; 
    this.a = a; 
    this.b = b; 
    this.c = c; 
    this.d = d; 
    this.e = e; 
    oneInstance.add(this); 

} 

Просто совет: Лучше отступы могут помочь вам поймать ошибки синтаксиса легко.

+0

Ах да, вы правы! Огромное спасибо!! – db579

1

Если по какой-либо причине вы не хотите, чтобы ваш код находился в конструкторе (например, если вы собираетесь добавить больше конструкторов, и вы хотите, чтобы он выполнял команду , все конструкторы) или в методе, вам нужно окружают его в фигурные скобки:

{ 
    oneInstance.add(this); 
} 

Но эта особенность, известная как instance initializer, редко используется в Java. В этом нет необходимости.

+0

Да, это то, что я изначально думал, что это произойдет в любом случае, но на самом деле это не требуется в моем случае. Спасибо за подсказку, хотя - хорошо знать! – db579

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