Digamos que eu tenha uma aula com anotações lombok como
@Builder
class Band {
String name;
String type;
}
Eu sei que posso fazer:
Band rollingStones = Band.builder().name("Rolling Stones").type("Rock Band").build();
Existe uma maneira fácil de criar um objeto de Foo usando o objeto existente como modelo e alterando uma de suas propriedades?
Algo como:
Band nirvana = Band.builder(rollingStones).name("Nirvana");
Não consigo encontrar isso na documentação do lombok.
@Wither
, que é mais eficiente para alterações de campo único:Foo f1 = f0.withX(42)
.@Wither
gera com * métodos que sempre retorna um novo objeto, ao invés de definir o campo do objeto existente. Isso é de baixa eficiência.@Wither
é melhor. Por mais de dois,toBuilder
ganha. Veja minha resposta abaixo.@Wither
não funcionará de todo, mas funcionaria.toBuilder().build()
.Se você realmente deseja alterar uma única propriedade, existe uma maneira mais agradável e eficiente:
@With class Band { String name; String type; } Band nirvana = rollingStones.withName("Nirvana");
A murcha não cria lixo, mas pode mudar apenas um único campo. Para alterar muitos campos, você pode usar
e produzir toneladas de lixo (todos resultados intermediários), mas do que
toBuilder
é mais eficiente e mais natural.NOTA: As versões mais antigas do lombok usavam
@Wither
anotações. Veja o início da documentação .fonte
n-1
objetos para uma série den
chamadaswithSomething
. Um objeto custa algo como alguns bytes mais 4 ou 8 bytes por referência mais 1 a 8 bytes por primitivo. Portanto, estamos falando de dezenas de bytes por chamada. Não é grande coisa, geralmente.