Comencé a usar la biblioteca de Lombok y no puedo entender la diferencia entre usar un wither y un constructor.
@Builder @Wither public class Sample { private int x; private int y; }Ahora puedo crear un objeto de 2 maneras:
Sample s = new Sample().builder() .x(10) .y(15) .build();O
Sample s = new Sample() .withx(10) .withy(10);¿Cuál es la diferencia entre los dos? ¿Cuál debo usar?
@Builder se usa para crear objetos mutables, @Wither para inmutables.
Divulgación: soy un desarrollador de lombok.
En general, la diferencia es que cuando construye un objeto con builder(), debe llamar al método build() al final, y antes de llamar a build(), todos los valores de propiedad se guardan en el objeto constructor interno en lugar del objeto que creó con nuevo. Después de configurar todas las propiedades y llamar a build(), se creará un nuevo objeto. Vea los detalles aquí: https://projectlombok.org/features/Builder.html . Creo que la mejor manera para el patrón de construcción es:
Sample s = Sample.builder() .x(10) .y(15) .build();Porque el primer objeto Sample es redundante.
Para withers, cada vez que llamas a withXXX(xxx), se devuelve un nuevo objeto, con XXX establecido en xxx, y todas las demás propiedades se clonan del objeto al que llamaste wither (si xxx es diferente del xxx original. Consulta los detalles aquí: https://projectlombok.org/features/experimental/Wither.html ). Elija de qué manera, creo que solo depende de su hábito personal y el estilo de código de su proyecto.
Espero que esto pueda ayudarte.