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

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

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

(0)

相关推荐

  • java枚举enum,根据value值获取key键的操作

    1.ZjlxEnum.java public enum ZjlxEnum implements IEnum { SFZ("1", "居民身份证"), XGZM("2", "香港特区护照/身份证明"), AMZM("3", "澳门特区护照/身份证明"), TWTXZ("4", "台湾居民来往大陆通行证"), JWJZZ("5",

  • java 自定义可继承枚举Enum的案例

    一.定义enum抽象类 public class AbstractEnum { private static final Map<String, AbstractEnum> nameEnumMap = new ConcurrentHashMap<>(); @Getter protected String name; protected AbstractEnum () { } protected AbstractEnum(String name) { this.name = name

  • Java枚举类接口实例原理解析

    这篇文章主要介绍了Java枚举类接口实例原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 枚举类可以实现一个或多个接口.与普通类实现接口完全一样,枚举类实现接口时,需要实现该接口所包含的方法. 如果需要每个枚举值在调用同一个方法时呈现不同的行为,则可以让每个枚举值在{...}匿名块中实现自己的业务逻辑. public interface IGradeHandler { String getGrade(String studentName)

  • 必须了解的高阶JAVA枚举特性!

    JAVA枚举,比你想象中还要有用! 我经常发现自己在Java中使用枚举来表示某个对象的一组潜在值. 在编译时确定类型可以具有什么值的能力是一种强大的能力,它为代码提供了结构和意义. 当我第一次了解枚举时,当时我认为它们只是一个为常量命名的工具,可以很容易地被静态常量字符串ENUM_VAL_NAME所取代. 后来我发现我错了.事实证明,Java枚举具有相当高级的特性,可以使代码干净.不易出错,功能强大. 让我们一起来看看Java中的一些高级枚举特性,以及如何利用这些特性使代码更简单.更可读. 枚举

  • Java 枚举类和自定义枚举类和enum声明及实现接口的操作

    1.枚举类 注: JDK1.5之前需要自定义枚举类 JDK 1.5 新增的 enum 关键字用于定义枚举类 若枚举只有一个成员, 则可以作为一种单例模式的实现方式 1.枚举类的属性 1.枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰 2.枚举类的使用 private final 修饰的属性应该在构造器中为其赋值 3.若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数 2.自定义枚举类 如何自定义枚举类的方法写在注释里 //自定义枚举类 c

  • Java实现接口的枚举类示例

    本文实例讲述了Java实现接口的枚举类.分享给大家供大家参考,具体如下: 一 点睛 枚举类也可以实现一个或多个接口.与普通类实现一个或多个接口完全一样,枚举类实现一个或多个接口时,也需要实现该接口所包含的方法. 如果需要每个枚举值在调用同一个方法时呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法,每个枚举值提供不同的实现方式,从而让不同枚举值调用同一个方法时具有不同的行为方式. 二 实战 1 代码 GenderDesc.java public interface GenderDesc {

  • 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, &qu

  • vue简单封装axios插件和接口的统一管理操作示例

    本文实例讲述了vue简单封装axios插件和接口的统一管理操作.分享给大家供大家参考,具体如下: 现在很多公司的项目都是前后端分离的项目,那么说到前后端分离,必定会有ajax请求来获得后台的数据. 在做jquery项目的时候,我们都会使用它封装好的方法来直接发起ajax请求. 在vue项目中,我们使用最多的就是axios这个插件,下面就简单的封装下这个插件并且把接口给统一化管理. 一.安装和配置 1.在项目根目录下打开终端安装 npm install axios -S 2.安装完成以后,在src

  • vue中封装axios并实现api接口的统一管理

    在vue项目中,我们通常都是使用axios与后台进行数据交互,axios有很多好用的特性,这里不多做介绍,相关细节可以查阅axios中文网.在对axios进行封装之前,我们要使用vue脚手架工具创建一个vue项目(这里我用的是cli4). 安装 cnpm install axios --save-dev; // 安装axios cnpm install qs --save-dev; // 安装qs模块,用来序列化post类型的数据,否则后端无法接收到数据 模块引入 在src目录下创建一个serv

  • Java泛型枚举Annotation接口详细解读与Eclipse发展

    目录 1.Eclipse开发工具 1.1 Eclipse历史 1.2 快捷键 1.3 Debug调试 1.4 JUNIT测试工具 2.Java基础新特性 2.1 可变参数 2.2 foreach输出 2.3 静态导入 3. JDK三大主要特性--泛型 3.1 泛型的引出 3.2 泛型实现 3.3 通配符 3.4 泛型接口 3.5 泛型方法 4.JDK三大主要特性--枚举 4.1 多例与枚举 4.2 Enum类 面试题:请解释enum和Enum的区别? 4.3 枚举中定义其它结构 4.4 枚举应用

  • vue项目接口管理,所有接口都在apis文件夹中统一管理操作

    在vue开发中,会涉及到很多接口的处理,当项目足够大时,就需要定义规范统一的接口,如何定义呢? 方法可能不只一种,本文使用axios+async/await进行接口的统一管理 本文使用vue-cli生成的项目举例 使用接口管理之前 在项目的某个具体组件中调接口,把调用接口的方法直接写在mounted中,或在是methods中 比如: xxx.vue <template> <div id="areaTree"> <!-- 标题 --> <div

  • 详解Java枚举与接口常量和类常量的区别

    目录 一个简单的需求 接口常量 类常量 枚举 什么是枚举 枚举常量 限制输入的类型 枚举可以使用==来比较吗 枚举实现单例 一个简单的需求 在我们实际开发java项目过程中,突然有一天"领导老王"给了个任务, 公司系统需要支持商品管理的需求 比如水果有:苹果,香蕉,葡萄等等,电子产品有:电脑,手机,摄像机等等 我们一般新建商品类Goods: public class Goods { /** * 商品名称 */ private String name; /** * 商品类型 */ pri

  • Java使用JDK与Cglib动态代理技术统一管理日志记录

    Java中动态代理主要有JDK和CGLIB两种方式. 区别主要是jdk是代理接口,而cglib是代理类. 优点:这种方式已经解决我们前面所有日记需要的问题.非常的灵活.而且可以方便的在后期进行维护和升级. 缺点:当然使用jdk动态代理,必需要有接口.如果没有接口.就无法使用jdk动态代理技术. 计算接口 Calculate.java public interface Calculate { /** * 加法运算 * @param num1 参数 1 * @param num2 参数 2 * @r

  • JAVA利用HttpClient进行HTTPS接口调用的方法

    本文介绍了JAVA利用HttpClient进行HTTPS接口调用的方法,分享给大家,具体如下: 1.为了避免需要证书,所以用一个类继承DefaultHttpClient类,忽略校验过程. import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManage

  • Java利用httpclient通过get、post方式调用https接口的方法

    通过httpclient的get post方式调用http很常见.一般都是 HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(http://127.0.0.1/login); 但是如果要调用https这个方式就不行了.就要修改DefaultHttpClient <dependency> <groupId>org.apache.httpcomponents</groupId>

随机推荐