• java 枚举类型


    枚举的实质是什么?

    枚举继承了ENUM类,枚举类型的每一个成员都以该类型的一个实例,而且默认的都是声明为public static final的 ,而且枚举里的每一个对象 就是当前枚举实例化的对象枚举里面所有的方法,里面的每个对象都可以调用

    enum中的方法:

    A.ordinal()用来返回枚举值在枚举类中的顺序。

    B.compareTo ()比较两个枚举值的顺序,返回顺序之差。

    C.values(),静态方法,返回包含一个全部枚举值的数组。

    D.toString(),返回枚举常量的名称

    E.valueOf(),返回指定没弄成的枚举类型的枚举常量。 

     先看个简单示例:

    enum FruitEnum {
        APPLE(1), ORANGE(2);    //    调用构造函数来构造枚举项
    
        private int value = 0;
    
        private FruitEnum(int value) {    //    必须是private的,否则编译错误
            this.value = value;
        }
    
        public static FruitEnum valueOf(int value) {    //    手写的从int到enum的转换函数
            switch (value) {
            case 1:
                return APPLE;
            case 2:
                return ORANGE;
            default:
                return null;
            }
        }
    
        public int value() {
            return this.value;
        }
    }
    
    public static void main(String[] args) {
        System.out.println(FruitEnum.APPLE.value());    //    1
        System.out.println(FruitEnum.ORANGE.value());    //   2
        System.out.println(FruitEnum.valueOf(1));        //  FruitEnum.APPLE
        System.out.println(FruitEnum.valueOf(2));        //  FruitEnum.ORANGE
    }

     

    下面就是网络上的各种版本的用法了:
    用法一:常量

    public enum Color {  
      RED, GREEN, BLANK, YELLOW  
    } 
    View Code

    用法二:switch

    enum Signal {
            GREEN, YELLOW, RED
        }
    
        public class TrafficLight {
            Signal color = Signal.RED;
    
            public void change() {
                switch (color) {
                case RED:
                    color = Signal.GREEN;
                    break;
                case YELLOW:
                    color = Signal.RED;
                    break;
                case GREEN:
                    color = Signal.YELLOW;
                    break;
                }
            }
        }
    View Code

    用法三:向枚举中添加新方法

    public enum Color {
            RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
            // 成员变量
            private String name;
            private int index;
    
            // 构造方法
            private Color(String name, int index) {
                this.name = name;
                this.index = index;
            }
    
            // 普通方法
            public static String getName(int index) {
                for (Color c : Color.values()) {
                    if (c.getIndex() == index) {
                        return c.name;
                    }
                }
                return null;
            }
    
            // get set 方法
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            public int getIndex() {
                return index;
            }
    
            public void setIndex(int index) {
                this.index = index;
            }
        }
    View Code

    用法四:覆盖枚举的方法

    public class Test {
        public enum Color {
            RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
            // 成员变量
            private String name;
            private int index;
    
            // 构造方法
            private Color(String name, int index) {
                this.name = name;
                this.index = index;
            }
    
            // 覆盖方法
            @Override
            public String toString() {
                return this.index + "_" + this.name;
            }
        }
    
        public static void main(String[] args) {
            System.out.println(Color.RED.toString());
        }
    }
    View Code

    用法五:实现接口

    public interface Behaviour {
            void print();
    
            String getInfo();
        }
    
        public enum Color implements Behaviour {
            RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
            // 成员变量
            private String name;
            private int index;
    
            // 构造方法
            private Color(String name, int index) {
                this.name = name;
                this.index = index;
            }
    
            // 接口方法
    
            @Override
            public String getInfo() {
                return this.name;
            }
    
            // 接口方法
            @Override
            public void print() {
                System.out.println(this.index + ":" + this.name);
            }
        }
    View Code

    实例

    public interface DateInfo {
         public String getDateInfo();
     }
    
    public enum Season2 implements DateInfo {
        
        SPRING("春天","春风又绿江南岸"){
            @Override
            public String getDateInfo() {
                return "2-5";
            }
        },
        SUMMER("夏天","映日荷花别样红"){
            @Override
            public String getDateInfo() {
                return "5-8";
            }
        },
        FALL("秋天","秋水共长天一色"){
            @Override
            public String getDateInfo() {
                return "8-11";
            }
        },
        WINTER("冬天","窗寒西岭千秋雪"){
            @Override
            public String getDateInfo() {
                return "11-2";
            }
        },;
        
        private String name;
        private String desc;
        
        private Season2(String name,String desc){
            this.name = name;
            this.desc = desc;
        }
    
        public String getName() {
            return name;
        }
    
        public String getDesc() {
            return desc;
        }
    
    /*    @Override 改为利用匿名内部类重写的方法更酷些
        public String getDateInfo() {
            System.out.println(this.toString().equals("SPRING"));
            return null;
        }  */    
    }
    
    Season2类继承接口DateInfo
    
    
    public class TestSeason {
    
        public static void main(String[] args) {
    
    //        Season SPRING = Season.SPRING;
    //        System.out.println(SPRING);
    //        System.out.println(Season2.SPRING);
            for(Season2 s:Season2.values()){
    //            System.out.println(s);
    //            System.out.println(s.toString().equals("SPRING"));
                System.out.println(s.getDateInfo());    
            }
            
            String str = "WINTER";
            Season2 s = Season2.valueOf(Season2.class, str);
            System.out.println(s.getName()+" "+s.getDesc());
        }
    }
    
    TestSeason测试类

     

  • 相关阅读:
    Linux各目录及每个目录的详细介绍
    centos7 + mysql5.7 tar包解压安装
    Hive2.0的新特性介绍
    Hadoop HIVE
    PIG执行MR时报Connection refused错误
    Zookeeper启动Permission denied
    Hadoop Pig
    Hadoop组件之-HDFS(HA实现细节)
    Datanode启动问题 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering>
    HDFS Federation
  • 原文地址:https://www.cnblogs.com/yujian-bcq/p/4597497.html
Copyright © 2020-2023  润新知