游戏百科

Java枚举类的正确用法

一、简介提到 Java 中的枚举类,我想很多人应该都知道,但其如何正确使用你真的知道吗?我所见过的最多用法就是当一个状态
一、简介

提到 Java 中的枚举类,我想很多人应该都知道,但其如何正确使用你真的知道吗?我所见过的最多用法就是当一个状态或类型的枚举集合使用,但实际上枚举的用途远不止于此。本文就好好讲讲它到底该如何使用。

二、基本使用

首先演示基本的用法,即做类型或状态的枚举值集合。下面给出性别的定义枚举:

有此定义后便可用该枚举类来进行性别的判断,如:根据枚举值的不同打印其具体含义,下面给出对应的示例:

执行结果如下所示:

三、进阶用法3.1 定义属性和 方法

实际上,大多数用法只是在枚举类中声明值确定的枚举对象,而非声明属性。对于枚举而言,其也是类,只不过是默认继承 Java.lang.Enum类且对象值有限的特殊类。既然是类,便能声明声明属性。仍以上面的枚举为例,在Gender枚举类中声明 code 和 desc 属性及其对应的 get 方法。

Gender枚举声明属性后的代码如下所示:

声明 code 和 desc 属性后,可将根据枚举值打印的示例改成如下所示:

执行结果如下所示:

3.2 声明静态方法

其实枚举类中除可以声明普通实例方法外,还可以声明静态方法,毕竟枚举也是类。仍以上述 Gender 枚举为例,在其中声明一个根据 code 获取指定枚举值的静态方法。对应代码如下所示:

接着对上述的测试例子进行修改,使其变为根据指定的 code 值输出对应的枚举值描述,修改后的代码如下所示:

执行结果如下所示:

3.3 声明抽象方法

既然枚举也是类,自然也能声明抽象方法,只不过声明抽象方法后,各枚举对象都为该枚举类的匿名内部类对象,如:增加一个 selfInstroduction 方法,即自我介绍方法。修改后的代码如下所示:

正因为声明的是抽象方法,因此必须在声明对象时使用创建匿名内部类对象的方式声明,并实现该抽象方法。接着对之前示例修改,使其能调用新声明的方法。修改后的示例代码如下所示:

执行结果如下所示:

3.4 实现接口

枚举类也可以实现接口,从而使其具备相同特征,这里声明一个  ICodeEnum 接口,其内只有返回 int 类型 code 的方法,其代码声明如下所示:

因为 Gender 枚举类已经有getCode 方法,因此可直接实现,而不会报错,下面为 Gender 实现  ICodeEnum 接口的示例代码:

但若未枚举未实现接口中的方法,则会报错。下面再声明一个枚举类,即常见的 YesOrNo枚举,声明代码如下所示:

此时会发现提示必须实现 getCode 方法:

所以需对其进行修改,依然增加 code 和 desc 属性,并实现 get 方法,修改后的代码如下所示:

在枚举中增加重写的 getCode 方法后就不会再报错。下面给出一个测试例子,对应代码如下所示:

执行结果如下所示:

3.5 接口中声明通用方法

众所周知,java8 之后接口中已支持声明 static 方法,通过这个特性,我们可以声明一些该接口子类都通用的方法。以 ICodeEnum 为例,其子类都必须实现 getCode 方法,因此能根据 code 获取对应的子类。当然因为是枚举的关系,所以应声明为静态方法,并需传入指定的子类枚举的Class 对象。

下面是对应的通用方法声明:

接着给出一个使用 ICodeEnum 的 findByCode 获取其子类指定枚举值的示例,对应示例代码如下所示:

执行结果如下所示:

到此关于枚举的使用小技巧便已介绍完毕。希望对大家有帮助。