zoukankan      html  css  js  c++  java
  • [JAVA]枚举类型的应用

    本文介绍枚举类的概念和开发过程中枚举的用法。
    枚举类使用enum关键字定义,enum默认继承自Enum类,由于java单继承的特点,enum类无法再继承其他父类

    一、枚举类的特性

    1、简单枚举类的定义

    枚举类用关键字enum定义,成员变量之间用逗号分隔,最后一个成员变量用分号结束。枚举类的命名建议加上Enum后缀。
    代码如下:

    public enum FruitEnum {
        APPLE,
        ORANGE,
        BANANA,
        PEAR
    }
    

    枚举的成员变量均为常量,可以通过FruitEnum.APPLE调用,构造方法被默认强制是私有,禁止通过new关键字实例化。
    枚举类自带values()方法可以返回该枚举的所有实例

    2、添加自定义方法

    枚举类继承自Enum,默认实现了很多常用方法,包括:toString(),compareTo(),equals(),hashCode()等。
    我们也可以给枚举类添加自定义方法,需要注意如下几点:

    1、自定义方法必须在enum实例之后;
    2、如果显示指明了构造方法,必须是默认(enum中默认既是私有)或私有
    3、最后一个实例需要加分号
    

    例如,给简单示例增加要给重写的toString()方法:

    public enum FruitEnum {
        APPLE,
        ORANGE,
        BANANA,
        PEAR;
    
        @Override
        public String toString() {
            return "fruit:"+super.toString();
        }
    }
    

    3、实现构造函数

    public enum FruitEnum {
        /**
         * description 苹果
         **/
        APPLE("苹果", 1),
        /**
         * description 橘子
         **/
        ORANGE("橘子", 2),
        /**
         * description 香蕉
         **/
        BANANA("香蕉", 3),
        /**
         * description 梨
         **/
        PEAR("梨", 4),
        /**
         * description 猕猴桃
         **/
        KIWI_FRUIT("猕猴桃", 5);
    
        private String description;
        private final Integer value;
    
        /**
         * description 构造函数
         * param [description, value]
         **/
        FruitEnum(String description, int value) {
            this.description = description;
            this.value = value;
        }
    
        /**
         * description 根据枚举值获取枚举对象
         * param [value]
         * return com.company.enumtest.FruitEnum
         * author 郑晓龙
         * createTime 2019/12/3 10:35
         **/
        public static FruitEnum getFruitEnumByValue(Integer value) {
            if (value == null) {
                return null;
            }
            for (FruitEnum fruitEnum : FruitEnum.values()) {
                if (fruitEnum.ordinal() == value) {
                    return fruitEnum;
                }
            }
            throw new NoSuchElementException();
        }
    
        public String getDescription() {
            return description;
        }
    
        public Integer getValue() {
            return value;
        }
    }
    

    二、枚举的应用场景

    1、switch语句中使用枚举

    case语句中不需要写枚举类名,可以直接写枚举实例,例如:

        FruitEnum fruit = FruitEnum.KIWI_FRUIT;
        switch (fruit){
            case APPLE:
                System.out.println("get apple!");
                break;
            case KIWI_FRUIT:
                System.out.println("get KIWI_FRUIT!");
                break;
            default:
                System.out.println("default");
        }
    

    2、枚举实现单例模式

    由于枚举天然的静态化和不可用new实例化,可以用于单例模式

    public enum Singleton {
        INSTANCE;
        /**
         * description 无参构造函数(可以省略)
         **/
        private Singleton(){
            System.out.println("I'm singleton");
        }
        public static void doSomething(){
            System.out.println("I'm doing!");
        }
    
    }
    
    

    main方法中使用单例:

     Singleton.doSomething();
     Singleton.doSomething();
    

    执行结果:

    I'm singleton
    I'm doing!
    I'm doing!
    

    可以看到,当Singleton类第一次被调用时,实例化了该单例类,并执行了方法,第二次直接执行了方法。

    参考:

  • 相关阅读:
    jquery获取当前时间比较日期
    php获取时间计算时间差
    计数查询统计
    jQuery选取所有复选框被选中的值并用Ajax异步提交数据
    在java中实现对access数据库的远程访问
    sublime快捷键
    局部变量和成员变量的区别
    常见的几种数组排序方法
    JVM的内存划分
    Java函数
  • 原文地址:https://www.cnblogs.com/zhengxl5566/p/11976361.html
Copyright © 2011-2022 走看看