Java中的枚举
qunincey 2020-05-21
java
java中枚举在实际开发中经常用到,但是我发现在Java8中枚举有很多新的用法,现在整理一下。
# 最简单的枚举用法
最原始的版本的枚举,只是单纯的使用枚举类定义一些静态常量。
public enum Test1 {
SPRING,
SUMMER,
FAll
}
1
2
3
4
5
6
2
3
4
5
6
在这种情况下可以直接使用类名.属性名的方式直接使用,也可以使用valueof这个枚举类自带的方法获取一个枚举类对象。
//第一种
Test1.SPRING;
//第二种
Test1 test1=Test1.valueOf("SPRING");
1
2
3
4
5
2
3
4
5
# 带参数的枚举
带参数的枚举,在我的理解力,每个枚举属性都更像是实现了枚举类(其实这样描述有点问题,只是行为上像是实现),这个类可以有自己的属性值。
在这种带参数的用法中,枚举类必须自带一个构造方法,用来指定属性类的参数,而且我们必须在类里赋值相对应的参数,感觉就是枚举类中属性比如TOP实现了枚举类,并且继承了构造参数和属性,再传入自身的属性值。
public enum Test2 {
TOP(1,"TOP1"),
MID(2,"MID2");
public final int Test2Code;
public final String mid2;
Test2(int Test2Code, String mid2) {
this.Test2Code = Test2Code;
this.mid2 = mid2;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
在这种用法下,可以使用枚举类自带的valueOf方法,获取相对应的枚举,当然也可以直接使用枚举属性的形式。
Test2.MID.Test2Code;
Test2 test2 = Test2.valueOf("MID");
System.out.println(test2.Test2Code);
1
2
3
4
2
3
4
# 枚举中使用方法
其实这是最想理清的一种用法,在工作的时候遇到一个需要多重判断的需求,但是我又不想写大量的if-else,但是也用不到工厂模式,看到一个文章使用枚举来解决。其实跟上文中属性值很像,只不过这次在枚举类里定义的是方法。
public enum Test2 {
TOP(1,"TOP1"){
@Override
public String returnValue() {
return this.mid2;
}
},
MID(2,"MID2"){
@Override
public String returnValue() {
return "我是方法"+this.mid2;
}
};
public final int Test2Code;
public final String mid2;
Test2(int Test2Code, String mid2) {
this.Test2Code = Test2Code;
this.mid2 = mid2;
}
public abstract String returnValue();
}
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
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
在这里我定义了一个returnValue的方法,枚举类下的所有属性必须实现这个方法,可以看到这个方法可以访问每个枚举的值。
Test2 test2 = Test2.valueOf("MID");
System.out.println(test2.returnValue());
1
2
2
但我们碰到大量需要if-else的时候可以使用这种枚举类,通过valueOf匹配到相对应的枚举实例上,之后调用的方法就是在枚举类中的定义的。下面是对应方法的输出
我是方法MID2
1