龙空技术网

Java 17 中枚举类型 Enum

小沐学学学 107

前言:

当前小伙伴们对“java枚举构造函数”大概比较讲究,兄弟们都需要剖析一些“java枚举构造函数”的相关知识。那么小编同时在网摘上收集了一些有关“java枚举构造函数””的相关文章,希望朋友们能喜欢,同学们一起来了解一下吧!

Java 17 中枚举类型 Enum思维导图

Java 中的枚举是一个特殊的数据类型,它能使变量成为一组预定义的常量,

在 Java 中定义枚举类型的字段名称使用全部的大写进行定义, 多个词组中间加上下划线。

枚举关键字 Enum 。定义格式是:

[修饰符] enum 枚举类{    // 枚举内容}

对于枚举类说, 在项目中主要的场景就是为了消除业务中的魔法值。 比方说, 数据的状态。 一般会定义 0 无效 1 有效。 如果定义了很多这种 0, 1 魔法值。 就很难在看到代码的时候,知道其中的含义。 这个时候, 就可以考虑使用枚举类型。

先看个基础的例子。 用户信息中的性别。

public enum SexEnum{    MALE, FEMALE}

写个测试类。

还可以直接遍历所有的枚举类中的值。

for (SexEnum sex : SexEnum.values()) {    System.out.println(sex);}
枚举类型的方法和构造函数

在 Java 中定义枚举类型除了常量以外, 还可以定义方法以及其他的字段。Java 编译器在进行创建枚举类时, 会自动添加一些特殊的方法。比方说:它有一个静态方法,该方法返回了一个数据, 数组中包含了枚举的所有值。

根据上面的例子, 这样写虽然说已经知道这个值是什么, 但是具体的还要知道该值和持久化数据的对应关系。

这个时候构造方法和成员方法就派上用场了。修改 SexEnum 枚举定义。 代码如下:

其中构造函数和枚举类型定义是一一对应的。

MALE(1), FEMALE(2);private SexEnum(int sex) {    this.sex = sex;}

其中的静态方法是为了能够根据数据库或者业务中的值,进行枚举对象的获得。

public static SexEnum valueOf(int sex) {switch (sex) {    case 1:        return SexEnum.MALE;    case 2:        return SexEnum.FEMALE;    default:        return null;    }}

完整代码和测试代码:

这个时候, 我不光想知道 男 MALE 业务中的魔法值 1。 还想知道代表的汉字意义是什么。 这个时候,可以再新添加一个成员变量。 同样需要返回对应的方法,代码如下。

private final String sexName;public String getSexName() {    return sexName;}

并且需要修改构造函数:

private SexEnum(int sex, String sexName) {    this.sex = sex;    this.sexName = sexName;}

修改测试代码:

对于枚举类的比较。 不需要调用 equals 函数, 直接使用 == 比价就好了。

枚举对象中有如下的方法可以使用:

values(): 返回枚举类型中所有的值。可以使用 foreach 进行遍历。他是 valueOf 方法的隐式调用方式。

ordinal(): 该方法可以返回枚举常量对应的索引值。该索引从 0 开始。多数情况下并不需要使用此方法, 它主要是为了给复杂的基于枚举的数据结构使用而设计的。 比方说:EnumSet 和 EnumMap 等。

public final int ordinal()

valueOf(): 该方法返回字符串值的枚举常量值。

public static <T extends Enum<T>> T valueOf(Class<T> enumClass, String name)

不过默认情况下, 可以使用隐式的调用方式。

public static T valueOf(String)

针对这几个方法。 values 已经使用过了。 我们看看 ordianl 和 valueOf 的使用方式。看上面的例子就知道了,并没有定义 String 的参数, 所以调用的就是该隐式的方法。

ordinal 例子

还用上面的枚举类型的例子。 然后改造测试代码就好了。 测试的代码如下:

valueOf 两个参数的例子

System.out.println(SexEnum.valueOf(SexEnum.class, "MALE"));System.out.println(SexEnum.valueOf(SexEnum.class, "MALE"));

完整代码演示和测试效果:

枚举类型实现接口

对于枚举类型可以实现接口。 但是在实现接口的时候, 每个枚举值都要实现接口的方法。 举个简单的例子。

测试代码如下:

对于枚举的知识点, 应该就这么多了。 如果有疏忽的地方, 欢迎指正。 感谢您的阅读。

点赞,关注,收藏。

希望你的代码写出来都没有bug,毕竟这是一个程序未列出来的特性。

标签: #java枚举构造函数 #性别在java中属于什么类型