롬복(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");
롬복 문서에서는 찾을 수 없습니다.
를 사용할 수 있습니다.toBuilder
instance를 지정하는 파라미터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()라는 클래스의 인스턴스 메서드를 생성할 수도 있습니다. 이 메서드는 toBuilder()의 모든 값으로 시작됩니다.의 인스턴스
면책사항:저는 롬복 개발자입니다.
기존 객체를 템플릿으로 사용하여 Foo의 객체 중 하나의 속성을 변경하는 쉬운 방법이 있습니까?(내 것을 제외)
하나의 속성을 정말로 변경하고 싶다면 더 좋고 효율적인 방법이 있습니다.
@With
class Band {
String name;
String type;
}
Band nirvana = rollingStones.withName("Nirvana");
시드는 쓰레기를 만들지 않지만 하나의 필드만 바꿀 수 있습니다.여러 필드를 변경하려면 다음을 사용할 수 있습니다.
withA(a).withB(b).withC(c)....
(모든 중간 결과) 엄청난 양의 쓰레기를 생산하지만toBuilder
보다 효율적이고 자연스럽다.
메모: 이전 버전의 롬복에서는@Wither
주석입니다.문서의 선두를 참조해 주세요.
또한 다음을 사용하여 개체의 복사본을 수행할 수도 있습니다.com.fasterxml.jackson.databind.ObjectMapper
@AllArgsConstructor
@Setter
class Band {
String name;
String type;
}
ObjectMapper objectMapper = new ObjectMapper(); //it's configurable
objectMapper.configure( DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false );
objectMapper.configure( SerializationFeature.FAIL_ON_EMPTY_BEANS, false );
Band rollingStones = new Band("Rolling Stones", "Rock Band");
Band nirvana = objectMapper.convertValue( rollingStones, Band.class);
nirvana.setName("Nirvana");
프로젝트 전체에서 사용하기 위한 몇 가지 유틸리티 방법으로 쉽게 포장할 수 있습니다.ConvertUtils.clone(rollingStones, Band.class)
언급URL : https://stackoverflow.com/questions/47069561/build-an-object-from-an-existing-one-using-lombok
'programing' 카테고리의 다른 글
페이지를 새로고침하지 않으면 Vuex 상태가 반응하지 않음 (0) | 2022.07.11 |
---|---|
VueStoreFront: 커스텀 모듈: 상태는 갱신되지만 컴포넌트는 갱신되지 않음 (0) | 2022.07.11 |
입력 스트림을 두 번 읽습니다. (0) | 2022.07.11 |
console.log()가 브라우저에 아무것도 기록하지 않는 이유는 무엇입니까? (0) | 2022.07.11 |
인스턴스가 생성된 후 Vue 인스턴스에 구성 요소 추가 (0) | 2022.07.11 |