@ Builder.Default en la clase base no funciona?

Feihua Fang:

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!

Ene Rieke:

@Builderque 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 @SuperBuilderuna oportunidad. Añadir que en ambas clases, y retirar el constructor manual. (Tenga en cuenta que @SuperBuilderaún no se admite en IntelliJ.)

La alternativa también está utilizando un constructor manual de la superclase y establecer el valor predeterminado allí.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=239532&siteId=1
Recomendado
Clasificación