Estoy escribiendo clases con anotaciones Lombok y tiene un problema:
@AllArgsConstructor
@Data
public abstract class Base {
protected static final int a = 1;
@Builder.default
protected int b = 1;
}
public static class Sub extends Base {
@Builder
Sub(final int b, final int c) {
super(b);
this.c = c;
}
private int c;
}
Y @ Builder.default no funciona cuando se trata de construir una subclase de esta manera:
Sub.builder()
.c(100)
b se supone que es el valor por defecto 1, pero en realidad es nula.
He encontrado algunos casos que podrían estar relacionados con la mía. Parece que super () es incompatible con @ Builder.Default. Todavía no sé cómo hacer que no b nulo. Cualquiera puede ayudar? ¡Gracias!
@Builder
que no está funcionando bien con la herencia, porque hay limitaciones técnicas que los procesadores de anotación como Lombok pueden hacer. Debido a estas limitaciones, Lombok no puede establecer el vínculo entre el nombre del parámetro y el nombre del campo en la superclase. (Y también es conceptualmente difícil hacer esto, ya que podría nombrar el parámetro diferente, y entonces lo que tiene que hacer un análisis más profundo de código.)
Si estás bien con el uso de características experimentales, podría darle @SuperBuilder
una oportunidad. Añadir que en ambas clases, y retirar el constructor manual. (Tenga en cuenta que @SuperBuilder
aún no se admite en IntelliJ.)
La alternativa también está utilizando un constructor manual de la superclase y establecer el valor predeterminado allí.