Luckylau's Blog

Java基础之Enum的用法

Enum的用法

首先从整体来看,我们可以把enum 看成是一个普通的 class,并定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承)。

常用方法包括:

1
2
3
4
5
6
7
8
9
10
11
12
int compareTo(E o)
比较此枚举与指定对象的顺序。
Class<E> getDeclaringClass()
返回与此枚举常量的枚举类型相对应的 Class 对象。
String name()
返回此枚举常量的名称,在其枚举声明中对其进行声明。
int ordinal()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
String toString()
返回枚举常量的名称,它包含在声明中。
static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
返回带指定名称的指定枚举类型的枚举常量。
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package test;
public class enumdemo {
public enum weekSchedule {
Mon(7,"语文"),
Tus(6,"数学"),
Wed(5,"英语"),
Thu(4,"物理"),
Fri(3,"化学"),
Sat(2,"生物"),
Sun(1,"体育");
private int num ;
private String value;
private weekSchedule(int num ,String value){
this.num = num;
this.value = value;
}
public int getNum() {
return num;
}
public String getValue() {
return value;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(weekSchedule.Fri.getValue());
weekSchedule test = weekSchedule.Thu;
switch (test.compareTo(weekSchedule.Sat)) {
case -2:
System.out.println("TUE 在 Sat 之前");
break;
case 1:
System.out.println("TUE 在 Sat 之后");
break;
default:
System.out.println("处于同一位置");
break;
}
System.out.println(test.toString());
System.out.println(test.ordinal());
System.out.println(test.name());
System.out.println(test.getDeclaringClass());
}
}
#output
TUE 在 Sat 之前
Thu
3
Thu
class test.enumdemo$weekSchedule

枚举实现单例模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public enum Singleton {
INSTANCE;
private Resource resource;
private Singleton() {
resource = new Resource();
}
public Resource getInstance(){
return resource;
}
}
class Resource{
public void dosomething(){
System.out.println("do something");
}
}
1
2
3
4
5
6
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Singleton3.INSTANCE.getInstance().dosomething();;
}
}

枚举类型的遍历

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
public enum WeekSchedule {
Mon(7,"语文"),
Tus(6,"数学"),
Wed(5,"英语"),
Thu(4,"物理"),
Fri(3,"化学"),
Sat(2,"生物"),
Sun(1,"体育");
private int num ;
private String value;
private WeekSchedule(int num ,String value){
this.num = num;
this.value = value;
}
public int getNum() {
return num;
}
public String getValue() {
return value;
}
public WeekSchedule getWeekSchedule(String value){
for(WeekSchedule item: WeekSchedule.values()){
String itemValue = item.getValue();
if(itemValue != null && itemValue.equals(value)){
return item;
}
}
return null;
}
}
Luckylau wechat
如果对您有价值,看官可以打赏的!