快捷搜索:  汽车  科技

java枚举类长度限制(Java17中枚举类型)

java枚举类长度限制(Java17中枚举类型)根据上面的例子, 这样写虽然说已经知道这个值是什么, 但是具体的还要知道该值和持久化数据的对应关系。for (SexEnum sex : SexEnum.values()) { System.out.println(sex); }枚举类型的方法和构造函数在 Java 中定义枚举类型除了常量以外, 还可以定义方法以及其他的字段。Java 编译器在进行创建枚举类时, 会自动添加一些特殊的方法。比方说:它有一个静态方法,该方法返回了一个数据, 数组中包含了枚举的所有值。先看个基础的例子。 用户信息中的性别。public enum SexEnum{ MALE FEMALE }写个测试类。还可以直接遍历所有的枚举类中的值。

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

java枚举类长度限制(Java17中枚举类型)(1)

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

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

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

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

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

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

public enum SexEnum{ MALE FEMALE }

写个测试类。

java枚举类长度限制(Java17中枚举类型)(2)

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

java枚举类长度限制(Java17中枚举类型)(3)

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

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

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

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

java枚举类长度限制(Java17中枚举类型)(4)

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

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; } }

完整代码和测试代码:

java枚举类长度限制(Java17中枚举类型)(5)

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

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

并且需要修改构造函数:

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

修改测试代码:

java枚举类长度限制(Java17中枚举类型)(6)

对于枚举类的比较。 不需要调用 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 例子

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

java枚举类长度限制(Java17中枚举类型)(7)

valueOf 两个参数的例子

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

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

java枚举类长度限制(Java17中枚举类型)(8)

枚举类型实现接口

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

java枚举类长度限制(Java17中枚举类型)(9)

测试代码如下:

java枚举类长度限制(Java17中枚举类型)(10)

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

点赞,关注,收藏。

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

猜您喜欢: