Как правильно вставить данные в ve c .get (0) без основной функции? - PullRequest
0 голосов
/ 21 июня 2020
class Instruction{
  Buffer buf = new Buffer();
  Vector<Buffer> vec = new Vector<Buffer>();
  vec.add(buf);  <--error
  ...
}

class Buffer{
  String name = new String( "Buffer-" );
  Vector<String> word = new Vector<String>();
  public Buffer(){
    name = new String( "Buffer-" );
    word = new Vector<String>();
  } // public
}

error: <identifier> expected

Я хочу вставить buf в vec.get(0);

Однако у него есть проблема.

Как я могу это исправить ?

Я не знаю, что происходит. В этом не должно быть ничего плохого.

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Проблема в том, что вы должны поместить vec.add() в метод. Как кто-то прокомментировал, вы можете поместить это в конструктор.

Ошибка identifier expected не очень полезна в этом контексте, но она относится к тому факту, что вызовы методов, сделанные вне метода, могут использоваться только для инициализации переменной. Таким образом, он ожидает, что переменная будет установлена ​​равной тому, что возвращает метод, а идентификатор относится к имени, которое идентифицирует эту переменную.

Для того, чтобы ваша программа могла работать, ей нужен какой-то основной метод. Есть некоторые «исключения» из этого (на ум приходит весенняя загрузка), но в этих случаях основной метод скрыт, а не отсутствует. Основной метод необходим, иначе Java не знал бы, с чего начать выполнение кода. Итак, если нет main, у вас есть нечто большее, чем библиотека, чем программа, которой требуется, чтобы программа вызывала свои методы, чтобы что-то делать. Надеюсь, это поможет.

0 голосов
/ 21 июня 2020

Хорошо, очевидно, ответ заключается в том, что функция add должна вызываться из метода, возможно, из конструктора:

class Instruction {
  Buffer buf = new Buffer();
  Vector<Buffer> vec = new Vector<Buffer>();
  public Instruction() {
    vec.add(buf);
  }
}

Но есть также забавный способ, в котором конструктор не используется:

class Instruction {
  Buffer buf = new Buffer();
  Vector<Buffer> vec = new Vector<Buffer>() {{
    add(buf);
  }};
}

Это «инициализация двойной скобки», которая немного нарушает синтаксис Java, но работает. Внешний набор фигурных скобок вводит анонимный подкласс Vector<Buffer>. Внутренние фигурные скобки являются блоком инициализации для этого подкласса.

Вы также можете инициализировать vec другой коллекцией, которую вы создаете специально для этой цели:

class Instruction {
  Buffer buf = new Buffer();
  Vector<Buffer> vec = new Vector<Buffer>(Collections.singleton(buf));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...