public enum SampleType {
TYPE_A(SubType.TYPE_AAA),
TYPE_B;
private SubType subType;
SampleType(SubType subType) {
this.subType = subType;
}
}
위 코드는 컴파일 에러 발생. Why?
요소별 괄호 안의 구성이 다르기 때문(이라고 생각 & 착각)
Enum 요소의 열거와 괄호 안의 값들은 결국 class의 생성자 호출과 다름 없다.
No Args Contructor를 추가해주면 모든 요소의 Args를 맞추지 않아도 된다!
public enum SampleType {
TYPE_A(SubType.TYPE_AAA),
TYPE_B;
private SubType subType;
SampleType() {} //기본 생성자 추가
SampleType(SubType subType) {
this.subType = subType;
}
}
...
Stream.of(SampleType.values())
.map(SampleType::getSubType)
.forEach(System.out::println);
/** 결과
* SubType.TYPE_AAA //TYPE_A의 SubType
* null //TYPE_B의 SubType
**/
요소들의 생성자 타입이 3가지 이상이 되는 경우,
혹은 다수의 Args가 있는 경우,
혼란스러워질 수 있으니 지양하자.