AVA-列挙(1)


列挙(enum)

  • に関連する定数を組み合わせた.JAVA提供タイプ安全の列挙
    つまり、値とタイプをチェックします.
  • class Card{
    	enum Kind	{	CLOVER, HEART, DIAMOND, SPADE	}	
        //열거형 kind를 정의	열거형 상수 앞에서부터 0,1,2,3 의 값을 가짐
        
        enum Value	{ TWO,	THREE, FOUR	}					
        //열거형 value를 정의
        
        final kind kind;	//타입이 int가 아닌 kind임에 유의하자.
        final Value value;	
    }
    
    ///////////////////////////////
    
    if (Card.Kind.CLOVER == CARD.Value.TWO){	
    // 컴파일에러, 타입이 달라 비교 불가능.
    

    列挙タイプの定義方法

    enum 열거형이름 {상수1, 상수2, ....}
    
    //ex)
    //enum Direction{	EAST, SOUTH, WEST, NORTH	}
    タイプ変数を宣言して使用する方法
  • class unit{
    	int x,y;		//유닛의 위치
        Direction dir;	//열거형 인스턴스 변수를 선언
        
        void init(){
        	dir = Direction.East;	//유닛의 방향을 EAST로 초기화
        }
    }
  • の列挙定数==と比較To()を比較するために使用できる
  • if(dir==Direction.EAST{
    	x++;
    } else if ( dir > Direction.WEST) //에러, 열거형 상수에 비교연산자 사용 불가능
    {
    	...
    } else if dir.compareTo(Direction.WEST>0)
    {
    	//에러, compareTo()는 사용 가능.
    }

    列祖

    String name()						      
    :열거형 상수의 이름을 문자열로 반환
    
    int ordinal()							  
    :열거형 상수가 정의된 순서를 반환(0부터 시작)
    
    T valueOf(Class<T> enumType, String name) 
    :지정된 열거형에서 name과 일치하는 열거형 상수를 반환
    
    // - values(), valueOf()는 컴파일러가 자동으로 추가
    static E[] values()
    static E valueOf(String name)
    
    Direction[] dArr = Direction.values();
    
    for(Direction d : dArr)			// for(Direction d : Direction.values())
    	System.out.printf("%s=%d%n", d.name(), d.ordinal());