Java中枚举如何使用(java,开发技术)

时间:2024-05-08 00:21:48 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

枚举介绍和使用

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

枚举定义方式如下:

//简单的定义
enumWeekEnum{
MONDAY,TUESDAY
}

//有属性的定义
enumStatusEnum{
ENABLE("1","启用"),DISABLE("0","禁用");

privateStringcode;

privateStringname;

StatusEnum(Stringcode,Stringname){
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,否则返回正值。

publicstaticvoidmain(String[]args){
//根据字符串获取枚举
StatusEnumenable=Enum.valueOf(StatusEnum.class,"ENABLE");
System.out.println(enable);
//枚举比较直接用==
System.out.println(enable==StatusEnum.ENABLE);

//values方法获取所有的枚举
StatusEnum[]values=StatusEnum.values();
for(StatusEnumstatusEnum:values){
//打印枚举的位置
System.out.println(statusEnum.ordinal());
}
}

运行结果:

Java中枚举如何使用

枚举的本质

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

继承了java.lang.Enum

Java中枚举如何使用

ENABLE、DISABLE最终转换为静态字段,类型其实StatusEnum这个类

Java中枚举如何使用

类加载的时候初始化ENABLE、DISABLE这两个属性。

Java中枚举如何使用

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

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

枚举常见用途

枚举创建单例

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

publicclassUser{
//私有化构造函数
privateUser(){}

//定义一个静态枚举类
staticenumSingletonEnum{
//创建一个枚举对象,该对象天生为单例
INSTANCE;
privateUseruser;
//私有化枚举的构造函数
privateSingletonEnum(){
user=newUser();
}
publicUsergetInstnce(){
returnuser;
}
}

//对外暴露一个获取User对象的静态方法
publicstaticUsergetInstance(){
returnSingletonEnum.INSTANCE.getInstnce();
}
}

枚举INSTANCE会在类加载初始化的时候创建,而Java类的加载和初始化过程都是线程安全的。

枚举可避免反序列化破坏单例。

枚举抽象方法

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

enumOperEnum{
ADD(1,2){
@Override
publicIntegeroperate(){
returnthis.getA()+this.getB();
}
},MULTIPY(1,2){
@Override
publicIntegeroperate(){
returnthis.getA()*this.getB();
}
};

privateIntegera;

privateIntegerb;

OperEnum(Integera,Integerb){
this.a=a;
this.b=b;
}

publicabstractIntegeroperate();

publicIntegergetA(){
returna;
}

publicvoidsetA(Integera){
this.a=a;
}

publicIntegergetB(){
returnb;
}

publicvoidsetB(Integerb){
this.b=b;
}
}

本文:Java中枚举如何使用的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:JEESZ REST服务接口文档下一篇:

5 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18