source

Java Lombok:@AllArgsConstructor에서 필드 하나를 생략하시겠습니까?

goodcode 2022. 9. 4. 15:18
반응형

Java Lombok:@AllArgsConstructor에서 필드 하나를 생략하시겠습니까?

Lombok을 사용하여 @AllArgsConstructor를 지정하면 선언된 (최종, 정적 아님) 필드를 모두 설정하기 위한 컨스트럭터가 생성됩니다.일부 필드를 생략하고 다른 모든 필드에 대해 생성된 생성자를 남길 수 있습니까?

아니, 그건 불가능해.를 작성하기 위한 기능 요청이 있습니다.@SomeArgsConstructor여기서 관련 필드 목록을 지정할 수 있습니다.

완전 공개:저는 롬복 프로젝트의 핵심 개발자 중 한 명입니다.

또는 다음을 사용할 수 있습니다.@RequiredArgsConstructor다음 중 하나에 해당하는 모든 필드의 생성자가 추가됩니다.@NonNull또는final.

매뉴얼을 참조

혹시나 해서 초기화가 되어 있습니다.final필드는 제외됩니다.

@AllArgsConstructor
class SomeClass {
    final String s;
    final int i;
    final List<String> list = new ArrayList<>(); // excluded in constructor
}

var x = new SomeClass("hello", 1);

특히 컬렉션 또는 기타 가변 클래스에 적합합니다.

이 솔루션은 다른 솔루션과 함께 사용할 수 있습니다.@RequiredArgsConstructor:

@RequiredArgsConstructor
class SomeClass2 {
    final String s;
    int i; // excluded because it's not final
    final List<String> list = new ArrayList<>(); // excluded because it's initialized
}

var x = new SomeClass2("hello");

경우에 따라서는 이 방법을 사용하는 것이 좋습니다.@Builder

이것은 lombok @RequiredArgsConstructor @NonNull의 두 가지 주석을 사용하여 수행할 수 있습니다.

다음과 같이 예를 들어주세요.

package com.ss.model;

import lombok.*;

@Getter
@Setter
@RequiredArgsConstructor
@ToString
public class Employee {

    private int id;
    @NonNull
    private String firstName;
    @NonNull
    private String lastName;
    @NonNull
    private int age;
    @NonNull
    private String address;
}

그런 다음 다음과 같이 개체를 만들 수 있습니다.

Employee employee = new Employee("FirstName", "LastName", 27, "Address");

언급URL : https://stackoverflow.com/questions/23761242/java-lombok-omitting-one-field-in-allargsconstructor

반응형