如何在Java中利用枚举对接口进行统一管理

发布时间:2021-02-25 16:37:22 作者:Leah
来源:亿速云 阅读:305

这篇文章给大家介绍如何在Java中利用枚举对接口进行统一管理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

枚举公共接口

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

程序运行结果

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

关于如何在Java中利用枚举对接口进行统一管理就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

推荐阅读:
  1. 如何在python中利用opencv对图片进行比对
  2. 如何在java中对JSONArray进行遍历

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java 枚举

上一篇:怎么在SpringBoot中利用Prometheus和Grafana实现实现应用监控和报警功能

下一篇:怎么在Java中使用Stream流求和

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》