网站首页 > 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枚举类型,为什么强烈推荐使用?看看它的7种场景方法
猜你喜欢
- 2024-12-06 C语言学习篇(26)——枚举enum
- 2024-12-06 你知道 Java 中关键字 enum 是一个语法糖吗?反编译枚举类
- 2024-12-06 java 枚举的使用
- 2024-12-06 java 枚举的定义与用法
- 2024-12-06 java枚举类型,为什么强烈推荐使用?看看它的7种场景方法
- 2024-12-06 Java的枚举类型用法介绍
- 2024-12-06 讲解一下java枚举(enum)以及使用方法
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)