class Card{
static final int CLOVER = 0;
static final int HEART = 1;
static final int DIAMOND = 2;
static final int SPADE = 3;
static final int TWO = 0;
static final int THREE = 1;
static final int FOUR = 2;
final int kind;
final int num;
if(Card.CLOVER == Card.TWO) // true이지만 false이여야 의미상 맞음.
}
위 코드를 다음과 같이 열거형으로 작성할 수 있다.
class Card{
enum Kind { CLOVER, HEART, DIAMOND, SPADE } // 열거형 Kind 정의
enum Value { TWO, THREE, FOUR } // 열거형 Value 정의
final Kind kind; // 타입이 int가 아닌 Kind 인것에 유의
final Value value;
if(Card.Kind.CLOVER == Card.Value.TWO) // 컴파일 에러!! 타입이 달라서 비교 불가.
}
enum 열거형이름 { 상수명1, 상수명2, ... }
enum Direction { EAST, SOUTH, WEST, NORTH }
class Unit{
int x, y; // 유닛의 위치
Direction dir; // 열거형 인스턴스 변수를 선언
void init(){
dir = Direction.EAST; // 유닛의 방향을 EAST로 초기화
}
}
if(dir == Direction.EAST){
x++;
} else if (dir > Direction.WEST) { // Error!! 열거형 상수에 비교연산자 사용불가
...
// a.compareTo(b) : return a - b
} else if (dir.compareTo(Direction.WEST) > 0) { // compareTo()는 가능
...
}
static E[] values()
static E valueOf(String name)
Direction[] dArr = Direction.values();
for(Direction d : dArr) // for(Direction d : Direction.values())
System.out.println("%s=%d%n", d.name(), d.ordinal());
Direction d = Direction.valueOf("WEST") // Direction d = Direction.WEST