玩转Java枚举

简介: 玩转Java枚举

枚举在Java中的本质是一个"语法糖",那么,翻译翻译,什么是语法糖?

假如你每天骑自行车去上班,可以说是蹬自行车去上班,但文雅一点的说法就是开车(自行车也是车)去上班,但本质上都是骑自行车上班,但这里说成了开车上班,就这是“语法糖”。

1 枚举的一般使用

1.1 代替public static final

public enum RoleEnum {
    USER, MANAGER, ADMIN
}
复制代码

使用:

public static void main(String[] args) {
    System.out.println(RoleEnum.MANAGER);
}
复制代码

输出:

网络异常,图片无法展示
|


1.2 自定义字段

public enum RoleEnum {
    USER("user"), MANAGER("manager"), ADMIN("admin");
    String role;
    RoleEnum(String role) {
        this.role = role;
    }
    @Override
    public String toString() {
        return this.role;
    }
}
复制代码

使用:

public static void main(String[] args) {
    System.out.println(RoleEnum.MANAGER);
}
复制代码

输出:

网络异常,图片无法展示
|


2 枚举实现单例模式

public enum SingletonInstance {
    INSTANCE;
    public static SingletonInstance getInstance() {
        return INSTANCE;
    }
}
复制代码

测试:

public static void main(String[] args) {
    System.out.println(SingletonInstance.getInstance() == SingletonInstance.getInstance());
}
复制代码

输出:

网络异常,图片无法展示
|


3 枚举反编译

3.1 反编译源码

public class Test {
    public static void main(String[] args) {
         System.out.println(RoleEnum.MANAGER);
    }
}
enum RoleEnum {
    USER, MANAGER, ADMIN
}
复制代码

3.2 进行反编译

C:\gitTest>javac Test.java
C:\gitTest>java Test
MANAGER
C:\Users\17122\Desktop\gitTest>javap -p RoleEnum.class
Compiled from "Test.java"
final class RoleEnum extends java.lang.Enum<RoleEnum> {
  public static final RoleEnum USER;
  public static final RoleEnum MANAGER;
  public static final RoleEnum ADMIN;
  private static final RoleEnum[] $VALUES;
  public static RoleEnum[] values();
  public static RoleEnum valueOf(java.lang.String);
  private RoleEnum();
  static {};
}
复制代码

3.3 结果及分析

final class RoleEnum extends java.lang.Enum<RoleEnum> {
  public static final RoleEnum USER;
  public static final RoleEnum MANAGER;
  public static final RoleEnum ADMIN;
  private static final RoleEnum[] $VALUES;
  public static RoleEnum[] values();
  public static RoleEnum valueOf(java.lang.String);
  private RoleEnum();
  static {};
}
复制代码

由此可见:

  • 枚举其实就是将类继承java.lang.Enum,每一个属性都是自身的对象类型。
  • 生成了$VALUES字段,用于保存枚举类定义的枚举常量。
  • valueOf方法进行值的类型转换


相关文章
|
2月前
|
Java
java枚举的使用
java枚举的使用
25 0
|
2月前
|
安全 Java
Java 枚举(Enums)解析:提高代码可读性与易维护性
在 Java 中,实现抽象的另一种方式是使用接口。 接口定义 接口是一个完全抽象的类,用于将具有空方法体的相关方法分组:
71 1
|
3月前
|
存储 安全 Java
解密 Java 枚举的奥秘:超越常量的选择
解密 Java 枚举的奥秘:超越常量的选择
35 0
|
4月前
|
开发框架 Java 编译器
Java反射,枚举讲解
Java反射,枚举讲解
44 0
|
6月前
|
Kubernetes 数据可视化 安全
枚举探秘:Java中的神奇力量!
枚举探秘:Java中的神奇力量!
|
12天前
|
缓存 Java 开发者
如何高效优雅的使用java枚举
本文通过几种样例展示如何高效优雅的使用java枚举消除冗余代码。
|
17天前
|
存储 算法 Java
滚雪球学Java(20):Java泛型与枚举:提升代码灵活性与可读性
【4月更文挑战第9天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
27 1
滚雪球学Java(20):Java泛型与枚举:提升代码灵活性与可读性
|
18天前
|
安全 Java
Java枚举类
Java枚举类
12 1
|
19天前
|
安全 Java 编译器
Java基础教程(14)-Java中的枚举类,泛型和注解
【4月更文挑战第14天】枚举类型(enum)是固定常量集合,Java中用`enum`定义。特点包括:使用enum关键字,定义类型名和值,可独立或嵌入定义,可实现接口,定义变量和方法。枚举在switch语句中适用,每个枚举值在JVM中唯一,不能继承Enum类。
|
19天前
|
Java
Java枚举与Switch
Java枚举与Switch
11 0