Eu tenho uma aula
@Value
@NonFinal
public class A {
int x;
int y;
}
Eu tenho outra classe B
@Value
public class B extends A {
int z;
}
lombok está lançando um erro dizendo que não foi possível encontrar o construtor A (), chame-o explicitamente o que eu quero que o lombok faça é dar uma anotação à classe b de modo que ela gere o seguinte código:
public class B extends A {
int z;
public B( int x, int y, int z) {
super( x , y );
this.z = z;
}
}
Temos uma anotação para fazer isso no Lombok?
inConstructor
método para anotações do construtor em que possamos especificar qual construtor dosuper
Lombok injetará no construtor gerado?A edição nº 78 do Lombok faz referência a esta página https://www.donneo.de/2015/09/16/lomboks-builder-annotation-and-inheritance/ com esta bela explicação:
Eu também descobri que isso funciona bem com Spring Data JPA.
fonte
O Lombok não oferece suporte para isso também indicado ao criar qualquer
@Value
classe anotadafinal
(como você sabe usando@NonFinal
).A única solução alternativa que encontrei é declarar você mesmo todos os membros finais e usar a
@Data
anotação. Essas subclasses precisam ser anotadas@EqualsAndHashCode
e precisam de um construtor all args explícito, pois o Lombok não sabe como criar um usando todos os args da superclasse:Especialmente os construtores das subclasses tornam a solução um pouco desordenada para superclasses com muitos membros, desculpe.
fonte
@EqualsAndHashCode
"? Esta anotação não foi incluída por@Data
? Thx :)@Data
também cria equals () e hashCode (), mas não se preocupa com nenhuma herança. Para garantir que a superclasse equals () e hashCode () seja usada, você precisa da geração explícita com callSuperpara superclasses com muitos membros, sugiro que você use @Delegate
fonte
@Delegate
é@Target({ElementType.FIELD, ElementType.METHOD})
.AInner
deve estar em campoA
.Se a classe filha tiver mais membros do que os pais, isso poderia ser feito de forma não muito limpa, mas de forma resumida:
fonte
A versão 1.18 do Lombok introduziu a anotação @SuperBuilder. Podemos usar isso para resolver nosso problema de uma maneira mais simples.
Você pode consultar https://www.baeldung.com/lombok-builder-inheritance#lombok-builder-and-inheritance-3 .
então, em sua aula infantil, você precisará destas anotações:
em sua classe de pais:
fonte
Como opção, você pode usar
com.fasterxml.jackson.databind.ObjectMapper
para inicializar uma classe filha do paiVocê ainda pode usar qualquer
lombok
anotação em A e B se precisar.fonte