Java 利用枚举实现接口进行统一管理
枚举公共接口
publicinterfaceIPairs{ /** *返回枚举对象 **/ Cget(); /** *返回枚举项的key **/ Kkey(); /** *返回枚举项的value **/ Vvalue(); }
状态枚举类
publicenumStatusEnumimplementsIPairs{ DISABLED(0,"recordhasbeendisabled"), ENABLED(1,"recordhasbeenenabled"), DELETES(9,"recordhasbeendeleted") ; privateintcode; privateStringdesc; StatusEnum(intcode,Stringdesc){ this.code=code; this.desc=desc; } publicStatusEnumget(){ returnthis; } @Override publicIntegerkey(){ returnthis.code; } @Override publicStringvalue(){ returnthis.desc; } }
响应枚举类
publicenumResponseEnumimplementsIPairs{ SUCCESS(10000,"success"), FAILED(10001,"failed") ; privateintcode; privateStringdesc; ResponseEnum(intcode,Stringdesc){ this.code=code; this.desc=desc; } publicResponseEnumget(){ returnthis; } @Override publicIntegerkey(){ returnthis.code; } @Override publicStringvalue(){ returnthis.desc; } }
代码验证
publicclassAnswerApp{ publicstaticvoidmain(String[]args){ invoke(StatusEnum.ENABLED); System.out.println(); response(ResponseEnum.SUCCESS); } privatestaticvoidresponse(IPairspairs){ System.out.println(pairs.get()==ResponseEnum.SUCCESS); System.out.println(MessageFormat.format("key:{0},value:{1}",pairs.key(),pairs.value())); } privatestaticvoidinvoke(IPairspairs){ System.out.println(pairs.get()==StatusEnum.ENABLED); System.out.println(MessageFormat.format("key:{0},value:{1}",pairs.key(),pairs.value())); } }
程序运行结果
true key:1,value:recordhasbeenenabled true key:10,000,value:success
结论:
项目中使用同一接口管理枚举类,在方法参数中使用接口而不是用具体的枚举对象作为入参,可以一定程度上降低程序的耦合性
补充:java中enum类的两种接口的实现方法
和普通Java类一样,枚举类可以实现一个或多个接口
若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只要统一实现该方法即可。
若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法
1、enum关键字定义枚举类实现接口的情况
```java interfaceinfo{ voidshow(); } enumSeason1implementsinfo{ //用enum关键字后,首先要把类里面定义的对象提到最前面,将一些重复 //的前缀的去掉,每个对象之间要用逗号隔开,最后一个用分号 //后面的就没有什么变化 SPRING("春天","春意暖暖"), SUMMER("春天","春意暖暖"), AUTUMN("春天","春意暖暖"), WINTER("春天","春意暖暖"); privatefinalStringseasonName; privatefinalStringseasonDeac; privateSeason1(StringseasonName,StringseasonDeac){ this.seasonDeac=seasonDeac; this.seasonName=seasonName; } publicStringgetSeasonDeac(){ returnseasonDeac; } publicStringgetSeasonName(){ returnseasonName; } //注意这时候没有重写toString方法,即但是依然可以输出对象 //的内容。即enum类不是继承object类,而是默认继承 //lang包下的enum类 @Override publicvoidshow(){ System.out.println("这是一个季节"); } }
enum接口的实现和普通类实现没有什么区别
二、让枚举类的对象分别去实现接口中的抽象方法
```java ```java /** *@authorLYH_351147852@QQ.COM *@create2019-10-0521:39 */ publicclassSeasonTest1{ publicstaticvoidmain(String[]args){ Season1[]values=Season1.values(); for(inti=0;i在每一个对象逗号前面加一个大括号,然后里面写上重写的方法
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。