티스토리 뷰
// 35-1. oridinal() 의 잘못된 사용 예
public enum Ensemble {
SOLO, DUET, TRIO, QUARTET, QUINTET,
SEXTET, SEPTET, OCTET, NONET, DECTET,
;
public int numberOfMusicians() {
return ordinal() + 1;
}
}
- 상수 선언 순서를 바꾸는 순간 메소드가 오작동한다.
- 이미 사용 중인 정수와 값이 같은 상수는 추가할 방법이 없다.
열거 타입 상수에 연결된 값은 oridinal() 로 얻지 말고, 인스턴스 필드에 저장하자.
public enum Ensemble {
SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUINTET(5),
SEXTET(6), SEPTET(7), OCTET(8), NONET(9), DECTET(10),
;
private final int numberOfMusicians;
Ensemble(int size) { this.numberOfMusicians = size; }
public int numberOfMusicians() { return numberOfMusicians; }
}
- Enum의 API 문서를 보면 ordinal 에 대해서는 "대부분 프로그래머는 이 메서드를 쓸 일이 없다." 단지 이 메서드는 EnumSet, EnumMap 과 같이 열거타입 기반의 범용 자료구조에 쓸 목적으로 설계되었다.
결론
- EnumSet, EnumMap과 같은 자료구조에 쓸 목적이 아니라면 ordinal() 메서드는 절대 사용하지 말자.
'책 > 이펙티브자바' 카테고리의 다른 글
아이템49. 매개변수가 유효한지 검사하라 (0) | 2021.08.30 |
---|---|
아이템38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라 (0) | 2021.08.29 |
아이템34. int 상수 대신 열거 타입을 사용하라 (0) | 2021.08.28 |
아이템27. 비검사 경고를 제거하라 (0) | 2021.08.24 |
아이템26. 로 타입은 사용하지 말라 (0) | 2021.08.24 |
링크
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- java
- 이펙티브자바 스터디
- 드림코딩
- 이펙티브자바 아이템59
- HTTP 완벽 가이드
- 이펙티브자바
- REST API
- BOJ
- 킹수빈닷컴
- 백준
- js array
- Spring Security
- ㅇㄷㅇㅈ
- HTTP 완벽가이드
- http
- js promise
- 백기선 스터디
- 이펙티브자바 아이템60
- JPA 연관관계 매핑
- 패스트캠퍼스 컴퓨터공학 완주반
- 김영한 http
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- 모던자바스크립트
- 김영한 JPA
- js api
- JS 딥다이브
- 프로그래머스 SQL
- GCP
- dreamcoding
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함