Enum的理解与使用示例

1枚举的本质

java.lang.Enum类声明

public abstract class Enum<E extends Enum<E>>
        implements Comparable<E>, Serializable { ... }

新建一个 ColorEn.java 文件,内容如下:

package io.github.dunwu.javacore.enumeration;
public enum ColorEn {
    RED,YELLOW,BLUE
}

执行 javac ColorEn.java 命令,生成 ColorEn.class 文件。

然后执行 javap ColorEn.class 命令,输出如下内容:

Compiled from "ColorEn.java"
public final class io.github.dunwu.javacore.enumeration.ColorEn extends java.lang.Enum<io.github.dunwu.javacore.enumeration.ColorEn> {
  public static final io.github.dunwu.javacore.enumeration.ColorEn RED;
  public static final io.github.dunwu.javacore.enumeration.ColorEn YELLOW;
  public static final io.github.dunwu.javacore.enumeration.ColorEn BLUE;
  public static io.github.dunwu.javacore.enumeration.ColorEn[] values();
  public static io.github.dunwu.javacore.enumeration.ColorEn valueOf(java.lang.String);
  static {};
}

枚举的本质是 java.lang.Enum 的子类。

尽管 enum 看起来像是一种新的数据类型,事实上,enum 是一种受限制的类,并且具有自己的方法。枚举这种特殊的类因为被修饰为 final,所以不能继承其他类。

定义的枚举值,会被默认修饰为 public static final ,从修饰关键字,即可看出枚举值本质上是静态常量。

在 enum 中,提供了一些基本方法:

values():返回 enum 实例的数组,而且该数组中的元素严格保持在 enum 中声明时的顺序。
name():返回实例名。
ordinal():返回实例声明时的次序,从 0 开始。
getDeclaringClass():返回实例所属的 enum 类型。
equals() :判断是否为同一个对象。

可以使用 == 来比较enum实例。
此外,java.lang.Enum实现了Comparable和 Serializable 接口,所以也提供 compareTo() 方法。

package com.zs.enums;

/**
 * @author zhaoshuai06 <zhaoshuai06@kuaishou.com>
 * Created on 2021-06-10
 */
public class EnumMethodDemo {
    enum Color {RED, GREEN, BLUE;}
    enum Size {BIG, MIDDLE, SMALL;}
    public static void main(String args[]) {
        System.out.println("=========== Print all Color ===========");
        for (Color c : Color.values()) {
            System.out.println(c + " ordinal: " + c.ordinal());
        }
        System.out.println("=========== Print all Size ===========");
        for (Size s : Size.values()) {
            System.out.println(s + " ordinal: " + s.ordinal());
        }

        Color green = Color.GREEN;
        System.out.println("green name(): " + green.name());
        System.out.println("green getDeclaringClass(): " + green.getDeclaringClass());
        System.out.println("green hashCode(): " + green.hashCode());
        System.out.println("green compareTo Color.GREEN: " + green.compareTo(Color.GREEN));
        System.out.println("green equals Color.GREEN: " + green.equals(Color.GREEN));
        System.out.println("green equals Size.MIDDLE: " + green.equals(Size.MIDDLE));
        System.out.println("green equals 1: " + green.equals(1));
        System.out.format("green == Color.BLUE: %b\n", green == Color.BLUE);
    }
}

2枚举的使用

package com.zs.enums;

import java.util.HashMap;
import java.util.Map;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * @author zhaoshuai06 <zhaoshuai06@kuaishou.com>
 * Created on 2021-06-10
 */
@Getter
@AllArgsConstructor
public enum LoveCodeEnumDemo {

    INVOLVED(520, "热恋中"),
    LOVELORN(555, "失恋中"),
    SINGLETON(111, "单身中"),
    MARRIAGE(222, "婚姻中");

    private Integer code;
    private String desc;

    public static final Map<Integer, LoveCodeEnumDemo>  loveCodeEnumMap = new HashMap<>();

    static {
        for (LoveCodeEnumDemo value : LoveCodeEnumDemo.values()) {
            loveCodeEnumMap.put(value.getCode(), value);
        }
    }

    public static final LoveCodeEnumDemo getLoveCodeEnumByCode(Integer code) {
        LoveCodeEnumDemo loveCodeEnum = loveCodeEnumMap.getOrDefault(code, null);
        return loveCodeEnum;

    }

}
class Test {
    public static void main(String[] args) {
        System.out.println(LoveCodeEnumDemo.INVOLVED.getDesc());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值