• Java 基础复习 -- Enum 类


    一、枚举类基本语法

    在 Java SE5 中添加了一个看似很小的特性,即 enum 关键字,它使得我们在需要群组并使用枚举类型集时,可以很方便的处理。

    所有的 enum 都继承自 java.lang.Enum 类。由于 Java 不支持多重继承,所以 enum 不能再继承其他类。然而我们创建一个新的 enum 时,可以同时实现一个或多个接口。

    创建一个简单的ColorEnum

    public enum ColorEnum {
      RED,YELLOW,BULE,GREED,BLACK;
    }
    

    调用的收直接在方法中使用 ColorEnum.RED 即可

    ColorEnum red = ColorEnum.RED;
    

    而且 Enum 有一个特别实用的特性,它可以在switch语句内使用:

    ColorEnum red = ColorEnum.RED;
    // 虽然一般情况下我们必须使用 enum 类型来修饰一个 enum 实例,但是在 case 语句中却不必如此。
    switch (red) {
      case RED:
        System.out.println("this's red color");
        break;
      case BULE:
        System.out.println("this's bule color");
        break;
      default:
        System.out.println("this's other color");
    }
    
    

    由于 switch 是要在有限的可能值集合中进行选择,因此它和 enum 是绝佳的组合。一般来说,在 switch 中使用整数值,而枚举实例天生就是具备整数值的次序,并且可以通过 ordinal() 方法取得其次序(现在显然是编译器帮我们做了类似的工作),因此我们可以再 switch 语句中使用 enum。

    自定义构造方法枚举类如何定义?

    public enum  RedisEnum {
        
        ADD(1, "add"), DEL(2, "delete"), query(3, "query");
        
        private Integer type;
        private String name;
    
        private RedisEnum(Integer type, String name) {
            this.type = type;
            this.name = name;
        }
    
        public Integer getType() {
            return type;
        }
    
        public String getName() {
            return name;
        }
    }
    

    枚举类提供的 API

    values(); 可以遍历 enum 实例。values()方法返回 enum 实例的数组,而且该数组中的元素严格保持其在 enum 中声明时的顺序,因此可以在循环中使用 values()返回的数组。

    valueOf(String key);

    ordinal();返回一个 int值,这个是每个 enum 实例在声明时的次序,从 0 开始。

    getDeclaringClass();enum 实例上调用这个方法可以获取其所属的 num 类

    name();返回 enum 实例声明时的名字,这与使用 toString 方法效果相同

    toString();返回 enum 实例声明时的名字

    equals(Object obj);enum 重写了 equals 和 hashcode

    hashCode();enum 重写了 equals 和 hashcode

    二、 使用枚举类型实现策略模式

    简单举一个例子

    public enum CalculationEnum {
        
        /**
         * 加法运算
         */
        ADD{
            @Override
            public double exec(double num1, double num2) {
                return num1 + num2;
            }
        },
        /**
         * 减法运算
         */
        SUB{
            @Override
            public double exec(double num1, double num2) {
                return num1 - num2;
            }
        };
    
        public abstract double exec(double num1, double num2);
    
        public static void main(String[] args) {
    
            double addNum = CalculationEnum.ADD.exec(1, 2.2);
            System.out.println(addNum);
            double subNum = CalculationEnum.SUB.exec(3.2, 1.1);
            System.out.println(subNum);
    
        }
    
    }
    
  • 相关阅读:
    Microsoft Updateclient更新
    DataTables warning: table id=dataTable
    BCB使用线程删除目录中的图片
    grep常见使用方法总结
    实战:percona-xtrabackup 2.1.9 for mysql 5.6.19
    代理模式之cglib动态代理
    hello world to php( mac 配置 xmapp virtual host)
    Android开发之AlarmManager具体解释
    linux入门教程(六) Linux文件与目录管理
    linux入门教程(五) Linux系统的远程登录
  • 原文地址:https://www.cnblogs.com/joimages/p/11995079.html
Copyright © 2020-2023  润新知