Как увеличить конечную переменную атрибута в конструкторе?

В моей домашней работе у меня есть класс Java с атрибутами

private final int idOfPassenger;
private final String name;

в конструкторе, который принимает только String в качестве параметра, я должен инициализировать как имя, так и идентификатор пассажира. Но каждый раз, когда я создаю new Passenger, я должен увеличивать переменную idOfPassenger на единицу (начиная с 0), чтобы у пассажиров не было одинаковых номеров.

Мне не разрешено изменять private final или параметры конструктора. Как увеличить idOfPassengers на 1 каждый раз, когда я создаю нового пассажира?

public class Passenger {

    private final int idOfPassenger;
    private final String name;

    public Passenger(String name) {
        this.name = name;
        this.idOfPassenger = 0;
    }
}

Вероятно, вы намеревались иметь другую переменную, которая отслеживает следующий идентификатор для использования, который тогда не будет окончательным и будет статическим. private static int nextPassengerId = 0;. Затем вы должны сделать idOfPassenger = nextPassengerId; и увеличить это на единицу, nextPassengerId++;. Помните о проблемах с многопоточностью, используйте AtomicInteger вместо nextPassengerId, если это проблема.

Zabuzard 13.12.2022 11:18
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Суть конечного поля в том, что ему нельзя переназначить новое значение. Таким образом, вы не можете увеличить его. Но вы неправильно понимаете задание. Вы не должны увеличивать private final int idOfPassenger; ваших существующих объектов, но вместо этого всегда инициализируйте его на одно значение выше, чем последний созданный объект при создании нового объекта. Вы можете реализовать это поведение, введя статическое поле, принадлежащее классу, а не какому-либо конкретному объекту:

public class Passenger {

    private final int idOfPassenger;
    private final String name;
    private static int currentId = 0;

    public Passenger(String name) {
        currentId++;
        this.name = name;
        this.idOfPassenger = currentId;
    }
}

Это создаст статическое поле, принадлежащее классу, и все ваши объекты будут общими. Он инициализируется 0, затем каждый раз, когда создается новый объект, это статическое поле увеличивается, а значение final int idOfPassenger устанавливается равным текущему значению этого статического поля.

Спасибо! В коде, который вы написали, будет ли первый пассажир иметь ID 0 или ID 1?

user19293033 13.12.2022 11:24

1: Увеличение currentId происходит до того, как оно будет присвоено idOfPassenger.

OH GOD SPIDERS 13.12.2022 11:33

Другие вопросы по теме