Самый безопасный (и нормальный) способ - это либо прямая инициализация:
private transient MyClass object = new MyClass();
или используя конструктор
public ParentClass() {
this.object = new MyClass();
}
Ленивая загрузка в геттеры (как вы делали в вашем примере) полезна только в том случае, если конструктор и / или блоки инициализации MyClass
делают довольно дорогие вещи, но не безопасны для потоков.
Модификатор transient
не имеет никакого значения. Поле пропускается только всякий раз, когда объект собирается сериализоваться.
Редактировать : больше не актуально. Как доказано кем-то другим, они действительно не получают повторную инициализацию при десериализации (хотя интересно, что это произойдет, только если они объявлены static
). Я бы продолжил ленивую загрузку или сбросил их через установщики сразу после десериализации.