玩转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方法进行值的类型转换


相关文章
|
前端开发 JavaScript Java
【前端学java】Java中的接口和枚举概念(8)
【8月更文挑战第9天】Java中的接口和枚举概念(8)
116 4
|
10月前
|
安全 Java 测试技术
🎉Java零基础:全面解析枚举的强大功能
【10月更文挑战第19天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
246 60
|
10月前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
130 24
|
安全 Java 程序员
Java语言枚举(Enum)的深入探索
Java语言枚举(Enum)的深入探索
162 0
|
12月前
|
安全 Java 索引
Java——反射&枚举
本文介绍了Java反射机制及其应用,包括获取Class对象、构造方法、成员变量和成员方法。反射允许在运行时动态操作类和对象,例如创建对象、调用方法和访问字段。文章详细解释了不同方法的使用方式及其注意事项,并展示了如何通过反射获取类的各种信息。此外,还介绍了枚举类型的特点和使用方法,包括枚举的构造方法及其在反射中的特殊处理。
195 9
Java——反射&枚举
|
12月前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
178 5
|
12月前
|
安全 Java 开发者
Java 枚举(enum)详解
Java 中的枚举(`enum`)是一种特殊的数据类型,用于定义一组固定的常量,提升代码的类型安全性和可读性。枚举使用 `enum` 关键字定义,支持方法和构造函数,具有类型安全、单例、自动序列化等特点,并且可以遍历和用于 `switch` 语句中。实际应用包括状态机、指令集、类型标识等场景。枚举使代码更加清晰易维护。
904 1
Java枚举使用的基本案例
这篇文章是关于Java枚举的基本使用,通过一个指令下发的代码案例,展示了如何定义枚举、使用枚举以及如何通过枚举实现指令的匹配和处理。
|
Java 开发者
在Java编程中,if-else与switch作为核心的条件控制语句,各有千秋。if-else基于条件分支,适用于复杂逻辑;而switch则擅长处理枚举或固定选项列表,提供简洁高效的解决方案
在Java编程中,if-else与switch作为核心的条件控制语句,各有千秋。if-else基于条件分支,适用于复杂逻辑;而switch则擅长处理枚举或固定选项列表,提供简洁高效的解决方案。本文通过技术综述及示例代码,剖析两者在性能上的差异。if-else具有短路特性,但条件增多时JVM会优化提升性能;switch则利用跳转表机制,在处理大量固定选项时表现出色。通过实验对比可见,switch在重复case值处理上通常更快。尽管如此,选择时还需兼顾代码的可读性和维护性。理解这些细节有助于开发者编写出既高效又优雅的Java代码。
180 2
|
安全 Java
Java进阶之枚举
【7月更文挑战第11天】Java枚举是Java 5引入的特性,用于定义固定常量集合,如星期。枚举是继承自`java.lang.Enum`的特殊类,编译后成为final类,每个枚举值是静态final实例。定义枚举用`enum`关键字,如`public enum Weekday {MONDAY, TUESDAY, ...}`。枚举可包含方法和变量,能实现接口但不能继承其他类。例如,`Weekday`枚举可实现`Describe`接口,提供`describe()`方法。在实际应用中,枚举常用于表示如响应状态等固定选项,便于类型安全和代码阅读。
86 8

热门文章

最新文章