JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Java 17 中枚举类型 Enum java枚举类型enum用法和写法

wys521 2024-11-09 15:02:17 精选教程 24 ℃ 0 评论

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,毕竟这是一个程序未列出来的特性。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表