>  기사  >  Java  >  Java 열거형 클래스에 대한 간략한 토론(코드 포함)

Java 열거형 클래스에 대한 간략한 토론(코드 포함)

尚
앞으로
2019-11-25 16:57:022045검색

Java 열거형 클래스에 대한 간략한 토론(코드 포함)

Java 열거형 클래스 소개: (Java 학습 영상 추천: java 영상 튜토리얼)

1. 열거형 클래스는 어떤 상황에서 사용해야 하나요?

때때로 클래스의 객체가 제한되어 고정되어 있는 경우에는 열거형 클래스를 사용하는 것이 더 편리합니다.

2. 열거형 클래스를 대체하기 위해 정적 상수를 사용하는 것은 어떨까요?

public static final int SEASON_SPRING = 1;    
public static final int SEASON_SUMMER = 2;    
public static final int SEASON_FALL = 3;    
public static final int SEASON_WINTER = 4;

열거형 클래스가 더 직관적이고 유형이 안전합니다. 상수를 사용하면 다음과 같은 단점이 있습니다.

1 unsafe를 입력합니다. 메소드에서 전달되는 시즌 매개변수가 필요한 경우 상수가 사용되면 형식 매개변수는 int 유형이 됩니다. 개발자는 모든 유형의 int 값을 전달할 수 있지만 열거형 유형인 경우에만 전달할 수 있습니다. 열거형 클래스에 전달됩니다.

2. 네임스페이스가 없습니다. 개발자는 이름을 지정할 때 SEASON_으로 시작해야 합니다. 그러면 다른 개발자가 이 코드를 볼 때 이 네 가지 상수가 계절을 나타낸다는 것을 알 수 있습니다.

3. 열거형 클래스 시작하기

먼저 간단한 열거형 클래스를 살펴보겠습니다.

package enumcase;public enum SeasonEnum {
    SPRING,SUMMER,FALL,WINTER;
}

enum은 클래스 및 인터페이스와 동일한 상태를 갖습니다. enum을 사용하여 정의된 열거형 클래스는 Object 클래스를 상속하는 대신 기본적으로 java.lang.Enum을 상속합니다. 열거형 클래스는 하나 이상의 인터페이스를 구현할 수 있습니다. 열거형 클래스의 모든 인스턴스는 new 키워드를 사용하거나 명시적으로 생성자를 호출하지 않고 첫 번째 줄에 표시되어야 합니다. 공개 정적 최종 수정 사항을 자동으로 추가합니다. enum을 사용하여 정의된 비추상 열거형 클래스는 기본적으로 final로 장식되며 상속될 수 없습니다. 열거형 클래스의 생성자는 비공개일 수만 있습니다.

4. 열거형 클래스 소개

속성 및 메서드는 열거형 클래스에서도 정의할 수 있지만 정적이거나 비정적입니다.

package enumcase;public enum SeasonEnum {
    SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天");    
    private final String name;    
    private SeasonEnum(String name)
    {        this.name = name;
    }    public String getName() {        return name;
    }
}

실제로 첫 번째 줄에 열거형 클래스 인스턴스를 작성할 때 기본적으로 생성자가 호출되므로 여기에 매개 변수를 전달해야 합니다. 매개 변수 없는 생성자에는 명시적인 선언이 없기 때문에 매개 변수가 있는 생성자만 가능합니다. 호출됩니다.

생성자는 비공개로 정의되어야 해당 객체가 다른 곳에서 선언될 수 없습니다. 열거형 클래스는 일반적으로 불변 클래스로 설계되어야 하며 해당 필드는 변경되어서는 안 됩니다. 이렇게 하면 코드가 더 간결해집니다. 그래서 우리는 private final로 Field를 수정합니다.

5. 열거형 클래스는 인터페이스를 구현합니다.

열거형 클래스는 하나 이상의 인터페이스를 구현할 수 있습니다. 일반 클래스와 마찬가지로 인터페이스를 구현할 때는 인터페이스에 정의된 모든 메서드를 구현해야 하며, 완전히 구현되지 않은 경우 열거형 클래스는 추상 클래스이지만 추상 수정을 명시적으로 추가할 필요는 없습니다. 기본적으로요.

package enumcase;

public enum Operation {
    PLUS{

        @Override
        public double eval(double x, double y) {
            return x + y;
        }
        
    },
    MINUS{

        @Override
        public double eval(double x, double y) {
            return x - y;
        }
        
    },
    TIMES{

        @Override
        public double eval(double x, double y) {
            return x * y;
        }
        
    },
    DIVIDE{

        @Override
        public double eval(double x, double y) {
            return x / y;
        }
        
    };
    
    /**
     * 抽象方法,由不同的枚举值提供不同的实现。
     * @param x
     * @param y
     * @return
     */
    public abstract double eval(double x, double y);
    
    public static void main(String[] args) {
        System.out.println(Operation.PLUS.eval(10, 2));
        System.out.println(Operation.MINUS.eval(10, 2));
        System.out.println(Operation.TIMES.eval(10, 2));
        System.out.println(Operation.DIVIDE.eval(10, 2));
    }
}

Operatio 클래스는 실제로는 추상이고 열거형 값을 생성할 수 없으므로 여기서 열거형 값을 선언할 때 추상 메서드가 구현됩니다. 이는 실제로 중괄호 부분이 클래스 본문입니다. 컴파일된 파일을 살펴볼 수 있습니다.

총 5개의 클래스 파일이 생성되었으며, 이는 PLUS, MINUS, TIMES 및 DIVIDE가 Operation의 익명 내부 클래스의 인스턴스임을 증명합니다.

Java 열거형 클래스에 대한 간략한 토론(코드 포함)

6. 스위치 문의 표현식은 열거형 값이 될 수 있습니다.

Java5에는 enum 키워드와 확장된 스위치가 추가되었습니다.

package enumcase;

public class SeasonTest {
    public void judge(SeasonEnum s)
    {
        switch(s)
        {
        case SPRING:
            System.out.println("春天适合踏青。");
            break;
        case SUMMER:
            System.out.println("夏天要去游泳啦。");
            break;
        case FALL:
            System.out.println("秋天一定要去旅游哦。");
            break;
        case WINTER:
            System.out.println("冬天要是下雪就好啦。");
            break;
        }
    }
    
    public static void main(String[] args) {
        SeasonEnum s = SeasonEnum.SPRING;
        SeasonTest test = new SeasonTest();
        test.judge(s);
    }
}

열거 클래스를 제한사항으로 추가하지 않고 케이스 표현식에 직접 열거 값을 씁니다.

추천: java 기본 튜토리얼

위 내용은 Java 열거형 클래스에 대한 간략한 토론(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제