Java枚举你真的会用吗

Java枚举你真的会用吗概述 Java 中枚举 大家在项目中经常使用吧 主要用来定义一些固定值 在一个有限的集合内 比如在表示一周的某一天 一年中的四季等 那你了解枚举的本质吗 了解枚举的一些常见用法吗 枚举介绍和使用枚举主要用来定义一个有限集合内的固定值

大家好,欢迎来到IT知识分享网。

概述

Java中枚举,大家在项目中经常使用吧,主要用来定义一些固定值,在一个有限的集合内,比如在表示一周的某一天,一年中的四季等。那你了解枚举的本质吗?了解枚举的一些常见用法吗?

枚举介绍和使用

枚举主要用来定义一个有限集合内的固定值。

枚举定义方式如下:

// 简单的定义 enum WeekEnum { MONDAY, TUESDAY } // 有属性的定义 enum StatusEnum { ENABLE("1", "启用"), DISABLE("0", "禁用"); private String code; private String name; StatusEnum(String code, String name) { this.code = code; this.name = name; } }

枚举编译后实际上继承了java.lang.Enum这个类,后面详细讲解,我们看下这个类的关键方法:

  • static Enum valueOf(Class enumClass, String name)

返回指定名字、给定类的枚举常量

  • String toString()

返回枚举常量名

  • int ordinal()

返回枚举常量在enum中的位置,从0开始

  • int compareTo(E other)

如果枚举场景出现在other之前,则返回一个负值,如果this == other,则返回0,否则返回正值。

public static void main(String[] args) { // 根据字符串获取枚举 StatusEnum enable = Enum.valueOf(StatusEnum.class, "ENABLE"); System.out.println(enable); //枚举比较直接用== System.out.println(enable == StatusEnum.ENABLE); // values方法获取所有的枚举 StatusEnum[] values = StatusEnum.values(); for (StatusEnum statusEnum : values) { // 打印枚举的位置 System.out.println(statusEnum.ordinal()); } }

运行结果:

Java枚举你真的会用吗

枚举的本质

枚举的本质其实一个类,继承了java.lang.Enum这个类。我们可以用idea的插件看下生成的字节码如下:

  1. 继承了java.lang.Enum
Java枚举你真的会用吗

  1. ENABLE、DISABLE最终转换为静态字段,类型其实StatusEnum这个类
Java枚举你真的会用吗

  1. 类加载的时候初始化ENABLE、DISABLE这两个属性。
Java枚举你真的会用吗

方法是类加载的初始化阶段就是执行的,它这里的主要逻辑就是创建了两个对象,设置到ENABLE,DISABLE上。

这下你明白枚举是怎么一回事情了吧。

枚举常见用途

枚举创建单例

枚举可以作为单例模式的最佳方式,能够保证单例对象的唯一性。

public class User { //私有化构造函数 private User(){ } //定义一个静态枚举类 static enum SingletonEnum{ //创建一个枚举对象,该对象天生为单例 INSTANCE; private User user; //私有化枚举的构造函数 private SingletonEnum(){ user = new User(); } public User getInstnce(){ return user; } } //对外暴露一个获取User对象的静态方法 public static User getInstance(){ return SingletonEnum.INSTANCE.getInstnce(); } }
  • 枚举INSTANCE会在类加载初始化的时候创建,而Java类的加载和初始化过程都是线程安全的。
  • 枚举可避免反序列化破坏单例。

枚举抽象方法

枚举类可以定义抽象方法,然后让各个具体的枚举实现,可以通过枚举实现不同的策略实现。

enum OperEnum { ADD(1, 2) { @Override public Integer operate() { return this.getA() + this.getB(); } }, MULTIPY(1, 2) { @Override public Integer operate() { return this.getA() * this.getB(); } }; private Integer a; private Integer b; OperEnum(Integer a, Integer b) { this.a = a; this.b = b; } public abstract Integer operate(); public Integer getA() { return a; } public void setA(Integer a) { this.a = a; } public Integer getB() { return b; } public void setB(Integer b) { this.b = b; } }

总结

本文主要讲解了枚举的本质,以及枚举的常见用法,希望对你们有帮助。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/172742.html

(0)
上一篇 2025-03-07 09:26
下一篇 2025-03-07 09:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信