열거 기능
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; } }
열거형 종합 적용 예: 신호등
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)를 참고해주세요!