Почему компилятор выдает ошибку когда я пытаюсь добавить объект в Set?

Рейтинг: -1Ответов: 1Опубликовано: 02.08.2023

Не могу понять, почему компилятор выдает ошибку когда я пытаюсь добавить объект класса Rout в Set rout?

public class SystemManager {
 Rout CI106 = new Rout("WizzAir", "Rome", "Berlin", 1, "06:00", "06:40", 25);

    Set<Rout> rout = new HashSet<>();
        rout.add(CI106);

Выдает ошибку: Cannot resolve symbol 'add'

Ответы

▲ 2Принят

Код, представленный в вопросе, выдает ошибку компиляции error: <identifier> expected, вызванную тем, что инициализацию сета нельзя выполнять указанным способом, создавая экземпляр коллекции и вызывая его методы.

Нужно либо использовать секцию инициализации:

// class level
Rout CI106 = new Rout("WizzAir", "Rome", "Berlin", 1, "06:00", "06:40", 25);
Set<Rout> rout = new HashSet<>();
{
    rout.add(CI106);
}

Устаревший нерекомендуемый способ -- double-brace инициализация:

// class level
Rout CI106 = new Rout("WizzAir", "Rome", "Berlin", 1, "06:00", "06:40", 25);
Set<Rout> rout = new HashSet<>() {{
    add(CI106);
}};

Но гораздо проще использовать конструктор с коллекцией и какой-либо из фабричных методов, создающий коллекцию:

  • "старые"
  • "новые" (Java 9+) List.of / Set.of для получения неизменяемых списков / сетов с произвольным количеством объектов.
Rout CI106 = new Rout("WizzAir", "Rome", "Berlin", 1, "06:00", "06:40", 25);
Set<Rout> rout = new HashSet<>(Set.of(CI106));

Ошибка Cannot resolve symbol add в представленном коде не воспроизводится и у неё другие причины.