Java 利用枚举实现接口进行统一管理

时间:2021-05-20

枚举公共接口

public interface IPairs<K, V, C extends Enum> { /** * 返回枚举对象 * */ C get(); /** * 返回枚举项的 key * */ K key(); /** * 返回枚举项的 value * */ V value();}

状态枚举类

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; }}

响应枚举类

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; }}

代码验证

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())); }}

程序运行结果

truekey: 1, value: record has been enabledtruekey: 10,000, value: success

结论:

项目中使用同一接口管理枚举类, 在方法参数中使用接口而不是用具体的枚举对象作为入参, 可以一定程度上降低程序的耦合性

补充:java中enum类的两种接口的实现方法

和普通 Java 类一样,枚举类可以实现一个或多个接口

若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只 要统一实现该方法即可。

若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法

1、enum关键字定义枚举类实现接口的情况

```javainterface 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接口的实现和普通类实现没有什么区别

二、让 枚举类的对象分别去实现接口中的抽象方法

```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("这是一个季节");// }}

在每一个对象逗号前面加一个大括号,然后里面写上重写的方法

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章