Digamos que tengo una clase anotada en lombok como
@Builder
class Band {
String name;
String type;
}
Sé que puedo hacer:
Band rollingStones = Band.builder().name("Rolling Stones").type("Rock Band").build();
¿Existe una manera fácil de crear un objeto de Foo usando el objeto existente como plantilla y cambiando una de sus propiedades?
Algo como:
Band nirvana = Band.builder(rollingStones).name("Nirvana");
No puedo encontrar esto en la documentación de lombok.

@Wither, que es más eficiente para los cambios de campo individuales:Foo f1 = f0.withX(42).@Withergenera con * métodos que siempre devuelven un nuevo objeto, en lugar de establecer el campo del objeto existente. Esto es de baja eficiencia.@Witheres mejor. Fot más de dos,toBuildergana. Vea mi respuesta a continuación.@Witherno funcionará en absoluto, pero lo.toBuilder().build()haría.Si realmente desea cambiar una sola propiedad, existe una forma más agradable y eficiente:
@With class Band { String name; String type; } Band nirvana = rollingStones.withName("Nirvana");El marchitamiento no crea basura, pero puede cambiar solo un campo. Para cambiar muchos campos, puede usar
y producir toneladas de basura (todos resultados intermedios) pero que
toBuilderes más eficiente y más natural.NOTA: Las versiones anteriores de lombok han utilizado la
@Witheranotación. Consulte el comienzo de la documentación .fuente
n-1objetos para una serie denllamadaswithSomething. Un objeto cuesta algo así como unos pocos bytes más 4 u 8 bytes por referencia más 1 a 8 bytes por primitiva. Entonces estamos hablando de decenas de bytes por llamada. No es gran cosa, por lo general.