zoukankan      html  css  js  c++  java
  • java中的枚举类

    1、枚举的由来

    假如有一个员工类

    public class Employee {
        public String id; // 编号
        public String name; // 姓名
        // 定义 员工角色 : 1、 BOSS 、 2 MANAGER 、3、WORKER (三选一)

        //很久很久之前,没有枚举,采用int 常量代替,把员工角色定义到一个类中 可读性还可以,安全性很差 employee1.role1= 100; 造成程序错误
        public int role1;

        // 很久之前,人们自定义一个带有枚举功能类,采用对象来标识
        public Role2 role2;

        // JDK5 提供枚举 简化自定义枚举类写法
        public Role3 role3;

      public static void main(String[] args) {
            //int常量标识不同的员工角色
            Employee employee1 = new Employee();
            employee1.role1 = Role1.BOSS;
            
            //对象标识不同的员工角色
            Employee employee2 = new Employee();
            employee2.role2= Role2.BOSS;
            
            //枚举来标识
            Employee employee3 = new Employee();
            employee3.role3= Role3.BOSS;
        }

    }

    //int常量标识不同的员工角色

    class Role1 {
        public static final int BOSS = 1;
        public static final int MANAGER = 2;
        public static final int WORKER = 3;
    }

    //使用对象来标识不同的角色

    class Role2{
        public static final Role2 BOSS = new Role2();
        public static final Role2 MANAGER = new Role2();
        public static final Role2 WORKER = new Role2();
        private role2(){}//私有构造器
    }

    // 枚举定义来标识
    enum Role3 {
        BOSS, MANAGER, WORKER;
        // 构造器必须私有
        private Role3() {}
    }

    2、枚举API的使用

    定义一个枚举类:Hobby,比如音乐,运动,学习

    enum Hobby{
        MUSIC,SPORT,STUDY;
        private Hobby(){}
    }

    根据已知的枚举对象的属性,获取其他的属性

    public class EnumAPITest {
        @Test
        public void method_3(){
            int index = 1;//已知枚举下标,获取枚举对象和名称
            Hobby []hobbies = Hobby.values();//先获取所有的枚举对象数组
            //获取枚举对象
            Hobby hobby = hobbies[index];//根据下标找到枚举对象
            System.out.println(hobby.name()); //SPORT
        }
        @Test
        public void method_2(){
            String name = "STUDY";//已知枚举名称,获取对象和下标
            //通过枚举名称获得枚举对象,有两种方式
            Hobby hobby = Hobby.valueOf(name);
            Hobby hobby2 = Enum.valueOf(Hobby.class, name);
            //有了对象就可以获取下标了
            System.out.println(hobby.ordinal());//2
            System.out.println(hobby2.ordinal());//2
        }
        @Test
        public void method_1(){
            Hobby hobby = Hobby.MUSIC;
            //已知枚举对象,由枚举对象来获取枚举名称和下标
            System.out.println(hobby.name());//MUSIC
            System.out.println(hobby.ordinal());//0
        }
    }

    3、枚举构造器有参数或枚举类中有抽象方法的情况

    public class EnumTest {
        public static void main(String[] args) {
            Color color = Color.BLUE;
            color.show();        
        }
    }
    //如果枚举构造器有参数,在枚举实例后 () 传入参数
    //如果枚举有抽象方法,解决用匿名内部类 实现抽象方法
    enum Color{
        RED(3){
            @Override
            void show() {
                System.out.println("hong");
            }
        },
        BLUE(4){
            @Override
            void show() {
                System.out.println("lan");
            }
        },
        BLACK(5){
            @Override
            void show() {
                System.out.println("hei");
            }
        };
        private Color(int x){};
        abstract void show();
    }

    以上很多都是依据当时学习时老师的范例,不管怎么说,希望对大家有所帮助!!!

  • 相关阅读:
    HTML知识点链接
    Apache和PHP的安装
    MySql的安装
    MY_FIRSH_MODULE
    【PAT甲级】1053 Path of Equal Weight (30 分)(DFS)
    Atcoder Grand Contest 039B(思维,BFS)
    Codeforces Round #589 (Div. 2)E(组合数,容斥原理,更高复杂度做法为DP)
    Codeforces Round #589 (Div. 2)D(思维,构造)
    【PAT甲级】1052 Linked List Sorting (25 分)
    【PAT甲级】1051 Pop Sequence (25 分)(栈的模拟)
  • 原文地址:https://www.cnblogs.com/zhuangwf/p/5150672.html
Copyright © 2011-2022 走看看