12-17~20列挙(enum)


列挙型

  • に関連する定数を組み合わせた
  • Java提供タイプの完全な列挙
    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로 초기화
        }
    }
    列挙定数を比較するために使用できる==およびcompareTo()、equals(オブジェクトであるため)
    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()는 가능
    	...
    }

    列挙型の祖先-java。lang.Enum

  • すべての列挙型はEnumの子孫であり,以下の方法を継承する.
  • ()、値Of()はコンパイラによって自動的に追加されます.
    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