java 之 枚举(Enum)

浅析理论:

Java枚举(enum)详解:Java声明枚举类型、枚举(enum)类、EnumMap 与 EnumSet
声明枚举
声明枚举时必须使用 enum 关键字,然后定义枚举的名称、可访问性、基础类型和成员等。
任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内,多个枚举成员之间使用逗号分隔。
使用枚举还可以使 switch 语句的可读性更强
Java 中的每一个枚举都继承自 java.lang.Enum 类。当定义一个枚举类型时,每一个枚举类型成员都可以看作是 Enum 类的实例,这些枚举成员默认都被 final、public, static 修饰,当使用枚举类型成员时,直接使用枚举名称调用成员即可。
所有枚举实例都可以调用 Enum 类的方法

  

浅析案例:

package com.gongxy;

public enum CompanyEnum {
    // 因为已经定义了带参数的构造器,所以在列出枚举值时必须传入对应的参数
    COMPANY("公司", 1),
    OUTSOURCE("外包", 2),
    MICRO_ENTERPRISES("小微企业", 3),
    SUPER_AGENT("超级经纪人", 4);

    private String description;

    public int getCode() {
        return code;
    }

    /*
    public void setCode(int code) {
        this.code = code;
    }
    public void setDescription(String description) {
        description = description;
    }
     */

    private int code;

    public String getDescription() {
        return description;
    }
    // 定义一个带参数的构造器,枚举类的构造器只能使用 private 修饰
    private CompanyEnum(String description, int code){
        this.description = description;
        this.code = code;
    }

    /*
    @Override
    public String toString() {
        return this.description;
    }
     */
}

  

package com.gongxy;

import java.util.Arrays;

public class EnumTest {
    public static void main(String[] args) {
        commonMethod();
    }

    /*
    常用方法
    int compareTo(E o): 该方法用于与制定枚举对象比较顺序,同一个枚举实例只能与相同类型的枚举实例比较。如果该枚举对象位于指定枚举对象之后,则返回正整数;反之返回负整数;否则返回零;
    String name(): 返回此枚举实例的名称,即枚举值 ;
    static values(): 返回一个包含全部枚举值的数组,可以用来遍历所有枚举值;
    String toString(): 返回枚举值的名称,与 name 方法类似,更常用;
    int ordinal(): 返回枚举值在枚举类中的索引值(从0开始),即枚举值在枚举声明中的顺序,这个顺序根据枚举值声明的顺序而定;
    static valueOf(): 返回带指定名称的指定枚举类型的枚举常量,
    名称必须与在此类型中声明枚举常量所用的标识符完全匹配(不允许使用额外的空白字符)。
    这个方法与toString相对应,因此重写 toString() 方法,一定要重写 valueOf() 方法(我们可以重写 toString() 方法,
    但不能自己重写 valueOf() 方法,当我们重写 toString() 方法时,valueOf() 方法会自动重写,不用我们理会。);
    boolean equals()方法: 比较两个枚举类对象的引用。
     */
    static void commonMethod(){
        System.out.println(CompanyEnum.COMPANY.getDescription());//公司
        System.out.println(CompanyEnum.COMPANY.getCode());//1
        System.out.println(CompanyEnum.OUTSOURCE.compareTo(CompanyEnum.COMPANY));//1
        System.out.println(CompanyEnum.OUTSOURCE.compareTo(CompanyEnum.OUTSOURCE));//0
        System.out.println(CompanyEnum.OUTSOURCE.compareTo(CompanyEnum.SUPER_AGENT));//-2
        CompanyEnum[] companyEnums = CompanyEnum.values();
        System.out.println(Arrays.toString(companyEnums));//[COMPANY, OUTSOURCE, MICRO_ENTERPRISES, SUPER_AGENT]
        System.out.println(CompanyEnum.COMPANY.toString());//COMPANY
        System.out.println(CompanyEnum.COMPANY.name());//COMPANY
        System.out.println(CompanyEnum.COMPANY.ordinal());//0
        CompanyEnum companyEnum = CompanyEnum.valueOf("COMPANY");
        System.out.println(companyEnum);//COMPANY[重写toString()返回“公司”]
        System.out.println(CompanyEnum.COMPANY.equals("COMPANY"));//false
        System.out.println(CompanyEnum.COMPANY.equals(companyEnum));//true
        switch(companyEnum){
            case COMPANY:
                System.out.println(CompanyEnum.COMPANY.getDescription());
                break;
            case OUTSOURCE:
                System.out.println(CompanyEnum.OUTSOURCE.getDescription());
                break;
            case MICRO_ENTERPRISES:
                System.out.println(CompanyEnum.MICRO_ENTERPRISES.getDescription());
                break;
            case SUPER_AGENT:
                System.out.println(CompanyEnum.SUPER_AGENT.getDescription());
                break;
        }
    }
}

  

原文地址:https://www.cnblogs.com/gygtech/p/13618288.html