Enum과 생성자

murkgom·2022년 5월 26일
0
public enum SampleType {
    TYPE_A(SubType.TYPE_AAA),
	TYPE_B;

	private SubType subType;

    SampleType(SubType subType) {
    	this.subType = subType;
	}
}

1. 착각

위 코드는 컴파일 에러 발생. Why?
요소별 괄호 안의 구성이 다르기 때문(이라고 생각 & 착각)

2. 깨달은 것

Enum 요소의 열거와 괄호 안의 값들은 결국 class의 생성자 호출과 다름 없다.

3. 해결

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
**/

4. 주의사항

요소들의 생성자 타입이 3가지 이상이 되는 경우,
혹은 다수의 Args가 있는 경우,
혼란스러워질 수 있으니 지양하자.

0개의 댓글