[java] 레코드의 기본 생성자 정의

레코드가 있고 기본 생성자를 추가하고 싶습니다.

public record Record(int recordId) {
   public Record{

   }
}

그러나 int param으로 생성자를 만들었습니다.

public final class Record extends java.lang.Record{
    private final int recordId;
    public Record(int);
    //other method
}

기본 생성자를 레코드에 어떻게 추가 할 수 있습니까?



답변

머리카락을 분할하려면 기본 생성자를 정의 할 수 없습니다. 생성자가 정의되지 않은 경우 기본 생성자가 컴파일러에 의해 생성되므로 정의 된 생성자는 기본적으로 기본 생성자가 아닙니다.

레코드에 인수가없는 생성자 가 포함되도록 하려면 모든 레코드 필드를 인수로 사용하는 “표준 생성자”가 호출되는 한 레코드는 추가 생성자 또는 팩토리 메소드를 추가 할 수 있습니다.

public record Record(int recordId) {
   public Record() {
      this(0); 
   }
}


답변

명시 적 생성자

귀하의 경우 원하는 경우 기본값이있는 표준 생성자에 위임을 사용하여 인수가없는 생성자를 명시 적으로 지정할 수 있으며 다음과 같이 수행 할 수 있습니다-

public Record(){
    this(Integer.MIN_VALUE);
}

요컨대, 비정규 생성자는 생성자에게 위임해야하며, 이는 이러한 표현의 데이터 전달 특성에 맞아야합니다.

소형 생성자

반면에 코드에서 사용한 표현에 유의하십시오.

public Record {}

모든 인수를 허용하는 생성자를 나타내는 “컴팩트 생성자”라고하며 레코드의 속성으로 제공된 데이터의 유효성을 검사하는 데 사용될 수도 있습니다. 컴팩트 생성자는 표준 생성자를 선언하는 다른 방법입니다.


답변