Я хотел бы знать, почему значение по-прежнему равно нулю, и если наследование является анти-паттерном в micronaot.
Наследование не является анти-паттерном в Micronaut.
Проблема, с которой вы столкнулись, не имеет никакого отношения к Микронавту. Это больше связано с тем, как распределяются объекты. Вы ссылаетесь на value
в конструкторе Parent
, но к этому моменту инициализация value
невозможна. Код, который инициализирует свойство value
, не может быть выполнен до тех пор, пока не будет инициализирован экземпляр Parent
, но вы пытаетесь сослаться на value
до того, как это произойдет. Вы бы увидели то же самое поведение, если бы вы оставили Микронавт вне его и просто вызвали new Parent();
.
Неясно, что вам нужно сделать для объекта value
, когда строится Parent
, но один вариант рассмотреть вместо этого:
import io.micronaut.context.annotation.Prototype;
@Prototype
class Base {
ValueHolder value;
Base(ValueHolder value) {
this.value = value;
}
}
import io.micronaut.context.annotation.Prototype;
@Prototype
class Parent extends Base {
Parent(ValueHolder value) {
super(value);
value.doSomthing(); // Not NullPointerException
}
}