kim.zhang

风在前,无惧!


  • 首页

  • 标签42

  • 分类12

  • 归档94

  • 搜索

枚举.md

发表于 2020-12-03 更新于 2021-11-21 分类于 基础
本文字数: 1.9k 阅读时长 ≈ 2 分钟

枚举的方法

枚举类 和 枚举类型混淆

​ 如下代码所示,AuditType是枚举类,AuditType中定义的PURCHASE、TENDER等是枚举类型。

  • values()获取枚举类下所有的枚举类型,返回一个枚举类型的数组
  • valueof()通过枚举的名字获取一个枚举类型。如果不存在给定名字的枚举类型,会抛出异常java.lang.IllegalArgumentException: No enum constant enumeration.AuditType.PURCHASE1
  • name()获取枚举类型的名称,与toString方法效果相同
  • ordinal()返回一个int值,代表枚举类型在声明时的次序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public enum AuditType {

/**
*
*/
PURCHASE("采购申请"),
TENDER("招标文件"),
CONTRACT("合同");

private String description;

AuditType(String description){
this.description = description;
}


public static void main(String[] args) {
// 获取枚举的次序,从0开始 0
System.out.println(AuditType.PURCHASE.ordinal());
// 获取枚举的名字 PURCHASE
System.out.println(AuditType.PURCHASE.name());
// 枚举类实现了Comparator接口,按照次序比较 1
System.out.println(AuditType.TENDER.compareTo(PURCHASE));
//values()获取所有类型的枚举 和 枚举的比较 true
for (AuditType type : AuditType.values()) {
System.out.println(AuditType.PURCHASE.equals(type));
System.out.println(AuditType.PURCHASE == type);
}
// 获取定义枚举的枚举类 class enumeration.AuditType
System.out.println(AuditType.PURCHASE.getDeclaringClass());
// 通过枚举名字获取枚举类型
AuditType purchaseType = AuditType.valueOf("PURCHASE");
System.out.println(purchaseType == AuditType.PURCHASE);

}
}

小小知识点

  • 枚举默认继承了Enum类,并实现了Serializalbe和Comparable接口。所以它具有CompareTo()方法
  • 编译器会提供equals()和hashcode()方法,所以枚举可以通过equals或==来进行比较
  • 枚举类必须在定于方法和属性之前定义枚举类型,否则在编译时就会报错
  • 枚举类的构造方法默认就是private的
  • 只能在枚举类内部使用构造函数,也就是说不能通过构造器传参给枚举类
  • 在Switch中使用枚举类型,可以直接使用枚举类型。比如使用PURCHASE而不是AuditType.PURCHASE
  • values()方法是编译器添加的static方法,在Enum类中并没有。如果向上转型为Enum类型,不能使用values()方法,可以通过Class的getEnumConstants()方法获取所有的枚举类型
  • valueOf()方法也是编译器添加的static方法,虽然在Ecum类中有valueOf方法,但它是两个参数的,而枚举类的ValueOf()是一个参数的
  • Enum类实现了Serializalbe和Comparable接口
  • 枚举类被final修饰,无法被继承

Enum的“values”方法

1
2
3
4
5
Enum e = AuditType.PURCHASE;
for (Enum enumConstant : e.getClass().getEnumConstants()) {
System.out.println(enumConstant.name());
System.out.println(enumConstant.equals(AuditType.PURCHASE));
}
一毛也是爱~
Kim.Zhang 微信支付

微信支付

# 枚举
ref.md
路由.md
  • 文章目录
  • 站点概览
Kim.Zhang

Kim.Zhang

且行且珍惜
94 日志
12 分类
42 标签
E-Mail Weibo
  1. 1. 枚举的方法
  2. 2. 小小知识点
  3. 3. Enum的“values”方法
粵ICP备19091267号 © 2019 – 2022 Kim.Zhang | 629k | 9:32
本站总访问量 4 次 | 有 309 人看我的博客啦 |
博客全站共176.7k字
载入天数...载入时分秒...
0%