I recently learned about object creation using @builder. But suddenly, I wonder if @Builder can be used to modify an object that has already been created.
When I try to modify an object using @setter, the advantage of creating a constructor with @builder seems to disappear. So I tried to modify only some variables using @builder, but it seems to create a new object altogether.
Is there a way to modify an object using @Builder?
Or should I just use a setter or create a separate function when modifying an object?
Advertisement
Answer
Not exactly modify, but you can use it as sort of copy constructor, which creates a new object builder out of old one. Then you can modify only the specific fields. Annotate your object with @Builder(toBuilder=true)
and then call .toBuilder()
on the object instance.
Very handy when dealing with immutable objects.
Example:
@Value @Builder(toBuilder = true) public class A { String name; long value; }
Then code like this:
var a = A.builder().name("test-name").value(1234L).build(); System.out.println(a); var b = a.toBuilder().value(4321L).build(); System.out.println(b);
Prints out this:
A(name=test-name, value=1234) A(name=test-name, value=4321)
References: