枚举公共接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public interface IPairs<K, V, C extends Enum> { /** * 返回枚举对象 * */ C get(); /** * 返回枚举项的 key * */ K key(); /** * 返回枚举项的 value * */ V value(); } |
状态枚举类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public enum StatusEnum implements IPairs<Integer, String, StatusEnum> { DISABLED( 0 , "record has been disabled" ), ENABLED( 1 , "record has been enabled" ), DELETES( 9 , "record has been deleted" ) ; private int code; private String desc; StatusEnum( int code, String desc) { this .code = code; this .desc = desc; } public StatusEnum get() { return this ; } @Override public Integer key() { return this .code; } @Override public String value() { return this .desc; } } |
响应枚举类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public enum ResponseEnum implements IPairs<Integer, String, ResponseEnum> { SUCCESS( 10000 , "success" ), FAILED( 10001 , "failed" ) ; private int code; private String desc; ResponseEnum( int code, String desc) { this .code = code; this .desc = desc; } public ResponseEnum get() { return this ; } @Override public Integer key() { return this .code; } @Override public String value() { return this .desc; } } |
代码验证
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class AnswerApp { public static void main(String[] args) { invoke(StatusEnum.ENABLED); System.out.println(); response(ResponseEnum.SUCCESS); } private static void response(IPairs pairs) { System.out.println(pairs.get() == ResponseEnum.SUCCESS); System.out.println(MessageFormat.format( "key: {0}, value: {1}" , pairs.key(), pairs.value())); } private static void invoke(IPairs pairs) { System.out.println(pairs.get() == StatusEnum.ENABLED); System.out.println(MessageFormat.format( "key: {0}, value: {1}" , pairs.key(), pairs.value())); } } |
程序运行结果
1
2
3
4
|
true key: 1 , value: record has been enabled true key: 10 , 000 , value: success |
结论:
项目中使用同一接口管理枚举类, 在方法参数中使用接口而不是用具体的枚举对象作为入参, 可以一定程度上降低程序的耦合性
补充:java中enum类的两种接口的实现方法
和普通 Java 类一样,枚举类可以实现一个或多个接口
若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只 要统一实现该方法即可。
若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法
1、enum关键字定义枚举类实现接口的情况
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
|
```java interface info{ void show(); } enum Season1 implements info{ //用enum关键字后,首先要把类里面定义的对象提到最前面,将一些重复 // 的前缀的去掉,每个对象之间要用逗号隔开,最后一个用分号 //后面的就没有什么变化 SPRING ( "春天" , "春意暖暖" ), SUMMER ( "春天" , "春意暖暖" ), AUTUMN ( "春天" , "春意暖暖" ), WINTER ( "春天" , "春意暖暖" ); private final String seasonName; private final String seasonDeac; private Season1(String seasonName,String seasonDeac){ this .seasonDeac = seasonDeac; this .seasonName = seasonName; } public String getSeasonDeac() { return seasonDeac; } public String getSeasonName() { return seasonName; } //注意这时候没有重写toString方法,即但是依然可以输出对象 // 的内容。即enum类不是继承object类,而是默认继承 //lang包下的enum类 @Override public void show() { System.out.println( "这是一个季节" ); } } |
enum接口的实现和普通类实现没有什么区别
二、让 枚举类的对象分别去实现接口中的抽象方法
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
```java ```java /** * @author LYH_351147852@QQ.COM * @create 2019-10-05 21:39 */ public class SeasonTest1 { public static void main(String[] args) { Season1[] values = Season1.values(); for ( int i = 0 ;i < values.length;i++){ values[i].show(); } } } interface info{ void show(); } enum Season1 implements info{ //用enum关键字后,首先要把类里面定义的对象提到最前面,将一些重复 // 的前缀的去掉,每个对象之间要用逗号隔开,最后一个用分号 //后面的就没有什么变化 SPRING ( "春天" , "春意暖暖" ){ @Override public void show() { System.out.println( "春天美好" ); } }, SUMMER ( "夏天" , "夏日炎炎" ){ @Override public void show() { System.out.println( "夏天炎热" ); } }, AUTUMN ( "秋天" , "秋高气爽" ){ @Override public void show() { System.out.println( "秋天寒冷" ); } }, WINTER ( "冬天" , "寒风呼啸" ){ @Override public void show() { System.out.println( "寒风呼啸" ); } }; private final String seasonName; private final String seasonDeac; private Season1(String seasonName,String seasonDeac){ this .seasonDeac = seasonDeac; this .seasonName = seasonName; } public String getSeasonDeac() { return seasonDeac; } public String getSeasonName() { return seasonName; } //注意这时候没有重写toString方法,即但是依然可以输出对象 // 的内容。即enum类不是继承object类,而是默认继承 //lang包下的enum类 // @Override // public void show() { // System.out.println("这是一个季节"); // } } |
在每一个对象逗号前面加一个大括号,然后里面写上重写的方法
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://jaemon.blog.csdn.net/article/details/93494983