>  기사  >  백엔드 개발  >  Java의 열거형 사용에 대한 자세한 소개

Java의 열거형 사용에 대한 자세한 소개

黄舟
黄舟원래의
2016-12-19 14:23:352202검색

열거 기능

1. 열거형 클래스를 정의하기 위해 enum을 사용하면 Object 클래스를 상속하는 대신 기본적으로 java.lang.Enum 클래스를 상속합니다. 그중 java.lang.Enum 클래스는 java.lang.Serialized 및 java.lang.Comparable의 두 가지 인터페이스를 구현합니다.

2. 열거형 클래스의 생성자는 해당 구성의 경우 개인 액세스 수정자만 사용할 수 있습니다. 생략됨 장치의 액세스 제어 문자는 기본적으로 비공개로 수정됩니다.

3. 열거 클래스의 모든 인스턴스는 열거 클래스에 명시적으로 나열되어야 합니다. 그렇지 않으면 이 열거 클래스는 인스턴스를 생성할 수 없습니다. . 이러한 인스턴스가 나열되면 프로그래머가 명시적으로 추가할 필요 없이 시스템이 자동으로 공개 정적 최종 수정 사항을 추가합니다.

public enum Week {
    MON{
        public String toLocaleString(){
            return "星期一";
        }
    },TUES{
        public String toLocaleString(){
            return "星期二";
        }
    },WEB{
        public String toLocaleString(){
            return "星期三";
        }

    },THUR{
        public String toLocaleString(){
            return "星期四";
        }

    },FRI{
        public String toLocaleString(){
            return "星期五";
        }

    },SAT{
        public String toLocaleString(){
            return "星期六";
        }

    },SUN{
        public String toLocaleString(){
            return "星期日";
        }

    };
    public abstract String toLocaleString();
}

열거 순회

public class EnumTest {
    public static void main(String[] args){
        for(Week w:Week.values()){
            System.out.println(w);
        }
    }
}

열거의 일반적인 메서드


int CompareTo 메서드

String name()은 열거형 인스턴스의 이름을 반환합니다.

int ordinal()은 열거형에 있는 열거형 값의 인덱스를 반환합니다.

String toString()은 더 큰 열거형의 인스턴스 이름을 반환합니다. 이름보다 일반적으로 사용되는

public static valueOf()

public class EnumTest {
    public static void main(String[] args){
        Week day =Week.FRI;
        System.out.println(day);//FRI
        System.out.println(day.name());//FRI
        System.out.println(day.ordinal());//4
        System.out.println(Week.valueOf("SUN").toLocaleString());//星期日
        System.out.println(Week.values().length);//7  获取枚举长度
    }
}

열거형 생성자

public enum Gender {
    MALE("男"),FEMALE("女");
    private String name;
    private Gender(String name){
        this.name =name;
    }
    public String getName(){
        return this.name;
    }
    public String toString(){
        String name = null;
        switch(this){
        case MALE:
            name="男";
            break;
        case FEMALE:
            name="女";
            break;
        }
        return name;
    }

}

열거형 종합 적용 예: 신호등

Java의 열거형 사용에 대한 자세한 소개

public enum Lamp {
     /*每个枚举元素各表示一个方向的控制灯*/    
     S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false),
     /*下面元素表示与上面的元素的相反方向的灯,它们的“相反方向灯”和“下一个灯”应忽略不计!*/
     N2S(null,null,false),N2E(null,null,false),W2E(null,null,false),W2N(null,null,false),
     /*由南向东和由西向北等右拐弯的灯不受红绿灯的控制,所以,可以假想它们总是绿灯*/
     S2E(null,null,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true);

     private Lamp(String opposite,String next,boolean lighted){
         this.opposite = opposite;
         this.next = next;
         this.lighted = lighted;
     }

 
     /*当前灯是否为绿*/    
     private boolean lighted;
     /*与当前灯同时为绿的对应方向*/    
     private String opposite;
     /*当前灯变红时下一个变绿的灯*/    
     private String next;
     public boolean isLighted(){
         return lighted;
     }

     /**
      * 某个灯变绿时,它对应方向的灯也要变绿
      */    
     public void light(){
         this.lighted = true;
         if(opposite != null){
             Lamp.valueOf(opposite).light();
         }
         System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");

     }

     /**
      * 某个灯变红时,对应方向的灯也要变红,并且下一个方向的灯要变绿
      * @return 下一个要变绿的灯
      */    
     public Lamp blackOut(){
         this.lighted = false;
         if(opposite != null){
             Lamp.valueOf(opposite).blackOut();
         }        

         Lamp nextLamp= null;
         if(next != null){
             nextLamp = Lamp.valueOf(next);
             System.out.println("绿灯从" + name() + "-------->切换为" + next);            
             nextLamp.light();
         }
         return nextLamp;
     }
 }

위 내용은 Java에서의 열거형 사용에 대한 자세한 소개입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.