Powiedzmy, że mam klasę z adnotacjami typu lombok
@Builder
class Band {
String name;
String type;
}
Wiem, że potrafię:
Band rollingStones = Band.builder().name("Rolling Stones").type("Rock Band").build();
Czy istnieje łatwy sposób na utworzenie obiektu Foo, używając istniejącego obiektu jako szablonu i zmieniając jedną z jego właściwości?
Coś jak:
Band nirvana = Band.builder(rollingStones).name("Nirvana");
Nie mogę znaleźć tego w dokumentacji lomboka.
@Wither
, co jest bardziej efektywne dla pojedynczych zmian pola:Foo f1 = f0.withX(42)
.@Wither
generuje z metodami *, które zawsze zwracają nowy obiekt, zamiast ustawiać pole istniejącego obiektu. To ma niską wydajność.@Wither
najlepiej. Fot więcej niż dwa,toBuilder
wygrywa. Zobacz moją odpowiedź poniżej.@Wither
nie będzie działać, ale.toBuilder().build()
będzie.Jeśli naprawdę chcesz zmienić jedną właściwość, jest lepszy i wydajniejszy sposób:
@With class Band { String name; String type; } Band nirvana = rollingStones.withName("Nirvana");
Uschnięcie nie tworzy śmieci, ale może zmienić tylko jedno pole. Aby zmienić wiele pól, możesz użyć
i produkuje tony śmieci (wszystkie pośrednie wyniki), ale niż
toBuilder
jest bardziej wydajne i bardziej naturalne.UWAGA: Starsze wersje lombok używały
@Wither
adnotacji. Zobacz początek dokumentacji .źródło
n-1
obiekty do seriin
wywołańwithSomething
. Obiekt kosztuje około kilku bajtów plus 4 lub 8 bajtów na odniesienie plus 1 do 8 bajtów na prymityw. Więc mówimy o dziesiątkach bajtów na wywołanie. Zwykle nic wielkiego.