为什么枚举要实现接口?
275
2022-11-02
Java 利用枚举实现接口进行统一管理
枚举公共接口
public interface IPBNkVGtiairs
/**
* 返回枚举对象
* */
C get();
/**
* 返回枚举项的 key
* */
K key();
/**
* 返回枚举项的 value
* */
V value();
}
状态枚举类
public enum StatusEnum implements IPairs
BNkVGtiDISABLED(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
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()));
}
}
程序运行结果
true
key: 1, value: record has been enabled
true
key: 10,000, value: success
结论:
项目中使用同一接口管理枚举类, 在方法参数中使用接口而不是用具体的枚举对象作为入参, 可以一定程度上降低程序的耦合性
补充:java中enum类的两种接口的实现方法
和普通 Java 类一样,枚举类可以实现一个或多个接口
若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只 要统一实现该方法即可。
若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法
1、enum关键字定义枚举类实现接口的情况
```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;
}
http:// 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("这是一个季节");
// }
}
在每一个对象逗号前面加一个大括号,然后里面写上重写的方法
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~