zoukankan      html  css  js  c++  java
  • 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;
            }
        }
    }
    

      

  • 相关阅读:
    LeetCode-Maximum Gap
    LintCode-Implement Queue by Stacks
    LintCode-Search Range in Binary Search Tree
    LintCode-BackPack II
    LintCode-Minimum Subarray
    LintCode-Sort Letters by Case
    LintCode-Longest Common Subsequence
    POJ 2226
    POJ 2724
    POJ 3692
  • 原文地址:https://www.cnblogs.com/gygtech/p/13618288.html
Copyright © 2011-2022 走看看