Как получить только что созданный объект внутри класса

Есть класс:

public class Person {
private static ArrayList<Person> persons = new ArrayList<Person>(10);

private final int id;
// Поля...

public Person(){
    // Конструктор
}
}

Могу ли я при создании объекта класса записать его в ArrayList этого же класса?

Пока на ум пришло такое решение:

  • Создать static метод, который создает, добавляет объект Person в ArrayList и возвращает его.
  • В главном методе присваиваем переменной типа Person результат работы созданного метода.

Является ли это решение лучшим?


Ответы (1 шт):

Автор решения: Nowhere Man

В конструкторе уже можно будет обращаться к только что созданному объекту через this, однако следует отметить, что у данного класса есть как минимум одно финальное поле id, которое должно быть проинициализировано в конструкторе, поэтому он должен выглядеть следующим образом:

public class Person {
    private static List<Person> persons = new ArrayList<>(10);

    private final int id;
    // другие поля

    public Person(int id) {
        this.id = id;
        persons.add(this);
    }
}

Тогда дефолтный конструктор (без параметров) можно в простейшем случае (к примеру в однопоточном приложении) определить так:

public Person() {
    this(persons.size() + 1);
}
→ Ссылка