handler
관련 글 : enum
기존 enum 값에서 변경을 할 때 처음에 작성을 변경 값만 작성했다.
1
2
3
4
5
6
7
@Getter
@AllArgsConstructor
public enum Answer{
Y("정답"), N("오답");
private final String name;
}
“A”에서 “정답”으로 변경하는 것이니깐 둘다 적어줘야 한다는 걸 알아서 아래와 같이 작성했었다.
1
2
3
4
5
6
7
8
@Getter
@AllArgsConstructor
public enum Answer{
Y("A", "정답"), N("B", "오답");
private final String team;
private final String name;
}
그리고 handler를 작성했다.
1
2
3
4
5
// 일부 생략
return Arrays.stream(Answer.values())
.filter(Answer -> (Answer.getTeam().equals(string) || Answer.name().equals(string)))
.orElse(null);
}
Answer.name().equals(string)
로 작성하면 실행이 잘 되는데
Answer.getName().equals(string)
으로 작성하면 제대로 실행이 되지 않는다.
그래서 enum의 name 대신 la로 작성하고 테스트해봤다.
1
2
3
4
5
6
7
8
@Getter
@AllArgsConstructor
public enum Answer{
Y("A", "정답"), N("B", "오답");
private final String team;
private final String la;
}
handler에서 Answer.name().equals(string)
로 작성을 해야 실행이 된다.
.getLa()로 작성하면 .getName()으로 작성했던 방법과 동일한 결과가 나온다.
결론적으로 get변수명
을 쓰는게 아니라 name을 쓴다.
enum의 메소드인 name()과 toString()은 상수로 정의된 자기 자신의 이름을 그대로 반환한다.
→ Y, N
그래서 이 name은 enum의 변수 name이 아니라 getNumber에 해당하는 상수 이름을 가져온다.
*getName은 정답, 오답을 가져오는 것이다.
따라서 name으로 설정한 변수와 enum에서 제공하는 name과 혼동할 수 있기 때문에
name 변수의 사용을 지양하는 편이라고 한다.
출처 : [Java] 열거형 enum