前言

在开发过程中,经常会有需要填写返回码来作为返回值的情况,最经典的场景便是请求接口的返回码,例如返回Result:

public class MyResult extends Result {private Object data;public Result(ResponseCode responseCode, Object data) {super(responseCode.getCode());this.data = data;setTimestamp(System.currentTimeMillis());}
}

如果我们要根据不同的处理结果,返回不同的code码以及data,例如:
成功:

return new MyResult(1, "返回成功");

失败:

return new MyResult(-1, "返回失败");

在这种情况下,使用数字1,-1这种形式存在一个问题,若后续需要将成功码返回改成2,便需要把所有的返回成功的场景改为2,明显是可扩展性很差的代码,因此很多处理方式就是将返回码抽成常量,例如:

private static final CODE_SUCCESS = 1;
private static final CODE_FAILURE = -1;

这时候就可以这样子进行使用:
成功:

return new MyResult(CODE_SUCCESS , "返回成功");

失败:

return new MyResult(CODE_FAILURE , "返回失败");

若有多个场景下,便可以使用相同的常量来进行返回,同时还可以很方便的进行修改返回码的值。
这种方法看起来已经很合适了,但是存在一个问题:
在后期随着返回码的场景增加、返回码的数量增加,很容易出现在使用过程中要从多个码中来获取某个码,出现获取错误的情况,例如,有以下Code:

private static final CODE_SUCCESS_UPGRADE = 1;
private static final CODE_SUCCESS_UPDATE = 2;
private static final CODE_SUCCESS_DOWNLOAD = 3;
private static final CODE_SUCCESS = 1;
.......

在使用的过程中就容易出现错误。
那么有没有方法可以更加优雅的实现返回code的统一呢?
这时候就可以通过在类中使用Enum来做常量的保存来进行优化了。

步骤

1、在类中创建内enum

public class Result {// 添加enumpublic enum ResponseCode {}private int code;private long timestamp;public Result() {}public Result(int code) {System.out.println("code : " + code);this.code = code;}public long getTimestamp() {return timestamp;}public void setTimestamp(long timestamp) {this.timestamp = timestamp;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}}

2、给enum设置定义好的值

    public enum ResponseCode {Success(0),Failure(-1),AuthenticationFailed(401),TokenFailed(404);private int code;public int getCode() {return code;}ResponseCode(int code) {this.code = code;}}

给每个值设置好良好的变量名,并且给定code,用该code来进行返回。

3、构造函数中修改为传入enum值,替换返回码,将其他构造函数设置为private

public class Result {public enum ResponseCode {Success(0),Failure(-1),AuthenticationFailed(401),TokenFailed(404);private int code;public int getCode() {return code;}ResponseCode(int code) {this.code = code;}}private int code;private long timestamp;public Result() {}public Result(ResponseCode responseCode) {this.code = responseCode.getCode();}}

在使用的时候就可以使用内部定义的code来进行传入。

这样子做有几个好处:

  1. 在类内部定义好传入规范,避免引用外部常量或者变量时因为外部修改导致错误发生,降低与外界耦合性,增加内聚性。
  2. 调用时规范用户返回码,避免用户传入异常的码,用户只能够传入内部enum所定义好的code,规范用户传入形式,增加代码稳健性。
  3. 保证编译时的类型安全,不会因为用户传入非法的类型而导致运行时错误。

代码优化小技巧-使用enum统一返回code码相关推荐

  1. 提高效率的Java代码优化小技巧

    可以提高效率的Java代码优化小技巧 前言 代码优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面 ...

  2. php源码编程,10个小技巧让你做好php源码编程

    PHP是目前使用最广泛的网站编程语言,也是今后发展的一大趋势.有很多站长或多或少掌握一些php编程方法,下面小编就介绍十点实用的php编码技巧. 1.cho比print 快,并且使用echo的多重参数 ...

  3. [小技巧]移除C/C++源码中无关的#ifdef

    我们在阅读C/C++的开源代码时,常常会遇到这样的烦恼.很多开源项目是跨平台的,代码中使用了大量条件编译,充斥着各种#ifdef(#ifudef)等等.这些代码段对于源码阅读者来说,通常是一种干扰(源 ...

  4. Python自动化小技巧06——任意图片做出二维码

    Python做二维码是很有趣的小项目.这段代码很简单,新手也能很快学会. 而且很实用,组建活动,送礼物,表白啥都能用的上. 主要依靠MyQR这个库来实现,先来看看效果: 我们将下面这个表情包,变为一个 ...

  5. 一些小技巧,想起来了就码上!

    printf.scanf的输入.输出效率要比cout.cin高很多 数组的长度可以使用sizeof函数求得 sizeof(array)/sizeof(array[0]);

  6. Restful Api 写法——统一返回值

    记录Restful Api 自定义统一返回值方式! 以下为示例代码: Code码Java类 package *.*.*;import java.util.ArrayList; import java. ...

  7. 使用ResponseEntity统一返回数据

    使用ResponseEntity统一返回状态码和数据 它是Spring提供的一个类,它内部封装了状态码,请求头,请求体等信息,可以根据自己的需要去设置状态码.请求体的信息.ResponseEntity ...

  8. 苹果手机把游戏藏在计算机,七个一定要知道的Iphone隐藏小技巧,很实用,我知道的太晚了...

    原标题:七个一定要知道的Iphone隐藏小技巧,很实用,我知道的太晚了 关于Iphone手机的小技巧大家都知道多少个呢?如果你用了苹果很多年的话,那你肯定知道很多小技巧吧?今天和分享些我个人知道的一些 ...

  9. python将数据导出到excel_使用python将大量数据导出到Excel中的小技巧分享

    使用python将大量数据导出到Excel中的小技巧分享 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  使用python将大量数据导出到Excel中的小技巧分享. ...

最新文章

  1. python语言程序设计基础网课-宜昌2020年_高校邦_Python程序设计基础【实境编程】...
  2. 编写自己的Javascript库-1
  3. Elastic Stack简介
  4. 使用bootstrap-table插件
  5. LeetCode 662. 二叉树最大宽度(递归)
  6. php操作MySQL数据库的方法和解析
  7. 通用时区:你应该知道的数据库时区知识
  8. 分布式监控系统开发【day38】:报警阈值程序逻辑解析(三)
  9. 独家发布全能在线语言翻译工具QTranslate v6.8.0 汉化中文版
  10. OpenSSL密码库算法笔记——第2.4章 三种模运算的比较
  11. MINIUI grid学习笔记
  12. 算法偏见是什么_处理人工智能的偏见如何使算法公平公正
  13. 电影——《小萝莉的猴神大叔》
  14. 深入理解java虚拟机(五)GC垃圾回收-经典垃圾收集器
  15. spring常见漏洞总结
  16. 电视剧 | 黑镜S5E1 生死搏击
  17. 攻击CSK靶机环境并学习linux渗透思路
  18. 小天软件园程序源码 一款纯发布软件程序
  19. 【IPFS直播】 利用ipfs协议传输进行直播
  20. Trimmomatic

热门文章

  1. cookie注入原理详解
  2. 【设计模式】Java 语言不同的编程范式-第1章
  3. 不需要邮箱 修改Gitlab账号密码(亲测可用)
  4. BT和eMule下载协议的比较和分析
  5. 《全栈技术资料》你值得拥有 | 寻找C站宝藏
  6. 2020-2021年度第2学期课程回顾总结
  7. Docker基础学习
  8. android adb interface驱动安装
  9. [RK356x] [Firefly-Ubuntu] 10min带你了解Ubuntu固件各个分区
  10. mysql是什么数据库