developer tip

lombok을 사용하여 기존 개체에서 개체 만들기

copycodes 2020. 12. 14. 20:04
반응형

lombok을 사용하여 기존 개체에서 개체 만들기


다음과 같은 롬복 주석이 달린 클래스가 있다고 가정 해 보겠습니다.

@Builder
class Band {
   String name;
   String type;
}

나는 내가 할 수 있다는 것을 안다.

Band rollingStones = Band.builder().name("Rolling Stones").type("Rock Band").build();

기존 객체를 템플릿으로 사용하고 속성 중 하나를 변경하여 Foo의 객체를 생성하는 쉬운 방법이 있습니까?

다음과 같은 것 :

Band nirvana = Band.builder(rollingStones).name("Nirvana");

lombok 문서에서 이것을 찾을 수 없습니다.


toBuilder매개 변수를 사용하여 인스턴스에 toBuilder()메서드 를 제공 할 수 있습니다 .

@Builder(toBuilder=true)
class Foo {
   int x;
   ...
}

Foo f0 = Foo.builder().build();
Foo f1 = f0.toBuilder().x(42).build();

에서 문서 :

@Builder를 사용하여 빌더를 생성하여 자체 클래스의 인스턴스를 생성하는 경우 (자신의 유형을 반환하지 않는 메소드에 @Builder를 추가하지 않는 한 항상 그렇습니다) @Builder (toBuilder = true)를 사용하여 생성 할 수도 있습니다. toBuilder ()라는 클래스의 인스턴스 메소드 이 인스턴스의 모든 값으로 시작하는 새 빌더를 만듭니다.

면책 조항 : 저는 롬복 개발자입니다.


기존 객체를 템플릿으로 사용하고 속성 중 하나변경하여 Foo의 객체를 생성하는 쉬운 방법이 있습니까? ( 강조 광산 )

정말로 단일 속성을 변경하고 싶다면 더 멋지고 효율적인 방법이 있습니다.

@Wither
class Band {
   String name;
   String type;
}

Band nirvana = rollingStones.withName("Nirvana");

위더는 쓰레기를 만들지 않지만 하나의 필드 만 변경할 수 있습니다. 많은 필드를 변경하려면 다음을 사용할 수 있습니다.

withA(a).withB(b).withC(c)....

엄청난 양의 쓰레기 (모든 중간 결과)를 생성하지만 toBuilder더 효율적이고 자연 스럽습니다.

참고 URL : https://stackoverflow.com/questions/47069561/build-an-object-from-an-existing-one-using-lombok

반응형