열거 란 무엇입니까?
열거는 JDK5가 도입 한 새로운 기능입니다. 경우에 따라 클래스의 객체가 고정되어 열거로 정의 될 수 있습니다. 실제로 사용하면 열거 유형은 프로그램 매개 변수의 안전을 보장하기 위해 사양으로 사용될 수 있습니다. 열거는 다음과 같은 특성을 가지고 있습니다.
java.lang.Enum 클래스에서 상속 받고 java.lang.Seriablizable 및 java.lang.Comparable 의 두 인터페이스를 구현합니다.public static final 이며, 비 임금 열거 클래스는 서브 클래스를 도출 할 수 없습니다. java.lang.Enum 클래스의 equals() 는 다음과 같습니다.
// 이것은 최종 수정되었으며 서브 클래스는 공개 Final Boolean Equals (Object Other)를 다시 작성할 수 없습니다 {return this == Other;} 열거를위한 일반적인 방법
int compareTo(E o)
이 열거의 순서를 지정된 객체와 비교하십시오. 객체가 지정된 물체보다 더 크거나 큰 경우, 음의 정수, 0 또는 양수 정수가 각각 반환됩니다. 열거 상수는 동일한 열거 유형의 다른 열거 상수와 만 비교할 수 있습니다.
// ENUM의 소스 코드 public final int compareto (e o) {enum other = (enum) o; Enum self = this; if (self.getClass ()! = 기타. getClass () && // 최적화 self.getDecLaringClass ()! = 기타 .getDecLaringClass ()) strach classcastException (); 셀프 셀프. String name()
이 열거 인스턴스의 이름을 반환합니다.
static values()
모든 열거 값을 반복하는 데 사용할 수있는 모든 열거 값을 포함하는 배열을 반환합니다.
String toString()
이 열거 인스턴스의 이름, 즉 열거 값의 이름을 반환합니다. name() 과 동일합니다.
// Enum public String ()의 이름 () 및 toString () {return name;} public final string name () {return name;} int ordinal()
열거 클래스 (0부터 시작)에서 열거 값의 인덱스 값, 즉 열거 값 선언의 순서에 따라 열거 선언의 열거 값의 순서를 반환합니다.
<T extends Enum<T>> valueOf()
지정된 이름으로 지정된 열거 유형의 열거 상수를 반환합니다. 이름은이 유형에서 열거를 일정하게 선언하는 데 사용 된 식별자와 정확히 일치해야합니다 (추가 공백 문자는 허용되지 않음). 이 메소드는 tostring에 해당하므로 toString() 메소드를 무시하면 valueOf() 메소드를 무시해야합니다 (우리는 toString() 메소드를 재정의 할 수 있지만 스스로 valueOf() 메소드를 재정의 할 수는 없습니다. toString() 메소드를 재정의하면 valueOf() 메소드가 자동으로 재 작성되며주의를 기울일 필요가 없습니다.
열거의 적용
열거는 특별한 유형이며, 사용량은 일반 클래스와 매우 유사합니다.
상수 세트를 교체하십시오
공개 열거적인 색상 {빨간색, 녹색, 빈, 노란색} 스위치 문에 사용됩니다
// 스위치는 jdk1.6에서 열거에 대한지지를 추가했습니다. 부서지다; } ...
열거에 메소드를 추가하십시오
public enum color {빨간색 ( "빨간색"), 녹색 ( "녹색"), blank ( "흰색"), yello ( "옐로우"); // 멤버 변수 개인 문자열 이름; // 생성자 개인 색상 (문자열 이름) {this.name = 이름; } // set method get public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; }} 인터페이스를 구현하십시오
공개 인터페이스 동작 {void print (); } public enum 색상 행동 {빨간색 ( "빨간색", 1), 녹색 ( "녹색", 2), blank ( "흰색", 3), Yello ( "Yellow", 4); // 인터페이스 메소드 @override public void print () {System.out.println (this.index+":"+this.name); }} 추상 방법을 포함하는 열거 클래스
공개 열거 조작 {// 추가 작업을 수행하는 데 사용됩니다 {// Curly Braces 부분은 실제로 익명의 내부 서브 클래스 @override public double calculation (double x, double y) {return x + y; }}, // 뺄셈 작업을 수행하는 데 사용됩니다 {// Curly Braces 부분은 실제로 익명의 내부 서브 클래스 @override public double calculation (double x, double y) {// todo auto -auto -regenated method stub return x - y; }}, // 곱셈 작업 시간을 수행하는 데 사용됩니다 {// Curly Braces 부분은 실제로 익명의 내부 서브 클래스 @override public double calculation (double x, double y) {return x * y; }}, // 분할 작업을 수행하는 데 사용되는 {// Curly Braces 부분은 실제로 익명의 내부 서브 클래스 @override public double calculation (double x, double y) {return x / y; }}; //이 열거 클래스의 추상 방법을 정의합니다. 열거 클래스의 모든 열거 값은이 방법을 구현해야합니다. 열거 된 싱글 톤 구현 (싱글 톤의 모범 사례)
혜택:
1. 단일 사례를 구현하기 위해 열거의 특징을 사용하십시오
2. JVM은 스레드 안전을 보장합니다
3. 일련의 직렬화 및 반사 공격은 열거에 의해 해결되었습니다.
공개 열거 싱글 톤 {인스턴스; Public Singleton GetInstance () {//이 방법을 추가하여 다른 사람들이 사용 방법을 이해할 수 있도록이 구현 방법은 비교적 드 rare니다. 반환 인스턴스; }} 다른 열거의 사용
열거
range(E from, E to)
열거 값에서 다양한 세트를 얻으십시오.
for (weekdayenum day : enumset.range (weekdayenum.mon, weekdayenum.fri)) {system.out.println (day); } of(E first, E... rest)
원래 지정된 요소를 포함하는 열거 세트를 만듭니다.
noneOf(Class<E> elementType)
지정된 요소 유형으로 빈 열거 설정을 만듭니다.
열거합니다
EnumMap(Class<K> keyType)
지정된 키 유형으로 빈 열거 맵을 만듭니다.
Map <Weather, String> enummap = new enummap <Weather, String> (Weather.class); enummap.put (Weather.Sunny, "Sunny"); enumMap.put (Weather.Rainy, "Rainy");
안드로이드에서 열거
열거는 많은 양의 메모리를 차지해야합니다. 메모리에 민감한 경우 가능한 한 적게 열거를 사용하여 정적 상수로 바꾸십시오.
그러나 열거를 사용하지 않으면 일부 보안 위험이 발생하므로 공무원은 두 개의 주석을 시작했습니다. 이 두 주석은 @intdef와 @stringdef입니다. Compile 'com.android.support:support-annotations:+'에 위치합니다.
사용의 예
@stringdef의 사용은 @intdef와 일치합니다. 여기서 우리는 예를 들어 @intdef를 취합니다.
공개 인터페이스 qrcodeType {int wechat = 0; int alipay = 1; @intdef ({wechat, alipay}) @retention (retentionpolicy.source) @target ({elementtype.field, emecttype.method, elementtype.parameter}) @interface checker {}} public class qrcode { @qrcodetype //checker // public void settype (@qrcodetype.checker int type) {// 매개 변수에서 정의 this.type = type; } @qrcodetype.checker // 메소드에서 정의 (즉, 리턴 값 유형을 확인) public int gettype () {return type; }} 사용 권장 사항
개발에서 가장 널리 사용되는 범위는 정적 상수 세트 대신 열거를 사용하는 것입니다. 이 경우 위의 주석 방법을 대신 사용할 수 있습니다.
열거에 다른 기능 (예 : 다른 정의 된 방법 포함)이 포함 된 경우 교체 할 수 없습니다.
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용이 귀하의 연구 나 작업에 도움이되기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다.