枚举 枚举和接口的使用 自定义返回code

导读:本篇文章讲解 枚举 枚举和接口的使用 自定义返回code,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

为什么使用枚举

最近在看公司的代码,发现公司使用到了枚举,这才让我重新拾起枚举的用法,枚举有四个方法:

方法名称 描述
values() 以数组形式返回枚举类型的所有成员
valueOf() 将普通字符串转换为枚举实例
compareTo() 比较两个枚举成员在定义时的顺序
ordinal() 获取枚举成员的索引位置

枚举的四个方法,我会在下文中讲到,现在先说为什么使用枚举。

我们在调用接口返回数据时,同时需要错误数据的状态码和描述,这时,就需要用到了枚举,我们可以在枚举定义好返回码和描述信息,供前台用户使用。

定义接口

package testEnum;

public interface BaseEnum {

	/**
     * 返回的错误代码
     *
     * @return
     */
    public String getCode();

    /**
     * 返回的中文描述
     *
     * @return
     */
    public String getChineseDesc();

    /**
     * 返回的英语描述
     *
     * @return
     */
    public String getEnglishDesc();
}

用枚举实现接口

其实,枚举就是类,我们可以在枚举当中定义构造器、属性、方法,而SUCCESS和ERROR中的参数就对应于构造器中的参数

package testenum;

/**
 * Created By zby on 21:28 2022/7/27
 * <p>
 * 结果返回值
 */
public enum ReturnCodeEnum implements BaseEnum {

    SUSSESS("000000", "success", "操作成功"),
    ERROR("100000", "error", "操作失败");

    private String code;
    private String englishDesc;
    private String chineseDesc;

    ReturnCodeEnum(String code, String englishDesc, String chineseDesc) {
        this.code = code;
        this.englishDesc = englishDesc;
        this.chineseDesc = chineseDesc;
    }

    @Override
    public String getCode() {
        return this.code;
    }

    @Override
    public String getChineseDesc() {
        return this.chineseDesc;
    }

    @Override
    public String getEnglishDesc() {
        return this.englishDesc;
    }

    /**
     * 根据参数获取返回值,将返回值以json格式的方式输出
     * <p>
     * 这里使用到了final关键字,防止type指向新的引用对象
     *
     * @param type 用户传入的枚举的参数,比如ReturnCodeEnum.SUCCESS,ReturnCodeEnum.ERROR
     * @return
     */
    public static String StringToJson(final Object type) {
        if (null == type || type.equals(""))
            return "{'code':'-100000','englishDesc':'type is null','chineseDesc':'类型为空'}";

        for (ReturnCodeEnum returnCodeEnum : ReturnCodeEnum.values()) {
            String name = returnCodeEnum.name();
            if (name.equals(type.toString())) {
                return "{'code':'" + returnCodeEnum.getCode()
                        + "','chineseDesc':'" + returnCodeEnum.getChineseDesc()
                        + "','englishDesc':'" + returnCodeEnum.getEnglishDesc()
                        + "'}";
            }
        }
        return "{'code':'-200000','englishDesc':'parameter is error ','chineseDesc':'参数类型错误'}";
    }

}

使用枚举

StringToJson方法

package testEnum;

public class Test {

	public static void main(String[] args) {
		System.out.println(ReturnCodeEnum.StringToJson(ReturnCodeEnum.ERROR));
	}
}

输出结果:
	{'code':'100000','englishDesc':'error','chineseDesc':'操作失败'}

values方法

重写toString方法

ReturnCodeEnum.java中增加ToString()方法

  /**
  * Created By zby on 21:45 2022/7/27
  * 重写toString方法,便于测试
  */
  @Override
  public String toString() {
      return "{'code':'" + this.getCode()
              + "','chineseDesc':'" + this.getChineseDesc()
              + "','englishDesc':'" + this.getEnglishDesc()
              + "'}";
  }

执行values方法

/**
 * Created By zby on 21:41 2022/7/27
 */
public class Test {

    public static void main(String[] args) {
		// 使用values()方法
        ReturnCodeEnum[] values = ReturnCodeEnum.values();
        for (ReturnCodeEnum value : values) {
            System.out.println(value);
        }
    }
}

输出结果: 
	{'code':'000000','chineseDesc':'操作成功','englishDesc':'success'}
	{'code':'100000','chineseDesc':'操作失败','englishDesc':'error'}

valueOf方法

package testenum;

import static testenum.ReturnCodeEnum.values;

/**
 * Created By zby on 21:41 2022/7/27
 */
public class Test {
    public static void main(String[] args) {
        ReturnCodeEnum error = ReturnCodeEnum.valueOf("ERROR");
        System.out.println(error);
    }
}

输出结果:
	{'code':'100000','chineseDesc':'操作失败','englishDesc':'error'}

compareTo方法

package testenum;

/**
 * Created By zby on 21:41 2022/7/27
 */
public class Test {
    public static void main(String[] args) {
        int i = ReturnCodeEnum.SUSSESS.compareTo(ReturnCodeEnum.ERROR);
        System.out.println(i);

        i = ReturnCodeEnum.SUSSESS.compareTo(ReturnCodeEnum.SUSSESS);
        System.out.println(i);

        i = ReturnCodeEnum.ERROR.compareTo(ReturnCodeEnum.SUSSESS);
        System.out.println(i);
    }
}

输出结果:
i --> -1
i --> 0
i --> 1
  • 当返回为-1时,说明前一个枚举的顺序在后一个枚举之前
  • 当返回为0时,说明这是同一个枚举
  • 当返回为1时,说明前一个枚举的顺序在后一个枚举之后

ordinal方法

package testenum;

/**
 * Created By zby on 21:41 2022/7/27
 */
public class Test {
    public static void main(String[] args) {
        System.out.println("ReturnCodeEnum.SUSSESS.ordinal --> "+ReturnCodeEnum.SUSSESS.ordinal());
        System.out.println("ReturnCodeEnum.ERROR.ordinal --> " + ReturnCodeEnum.ERROR.ordinal());
    }
}

输出结果:
	ReturnCodeEnum.SUSSESS.ordinal --> 0
	ReturnCodeEnum.ERROR.ordinal --> 1

总结

枚举在我们开发中还是非常重要的,因而,我们开发经常使用枚举返回状态码和信息。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99280.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!