查看原文
其他

枚举很好用啊,为什么阿里开发手册不建议返回值用枚举?

Java精选 2022-08-09

点击上方“Java精选”,选择“设为星标”

别问别人为什么,多问自己凭什么!

下方留言必回,有问必答!

每天 08:00 更新文章,每天进步一点点...

为什么阿里不建议返回枚举呢?我们先来看一下阿里开发手册。

从文中可以看出,定义和使用枚举,阿里开发手册都是支持的,但是为啥,返回值就要反对了呢?那么,我们来看看作者孤尽是怎么说的。

由于升级原因,导致双方的枚举类不尽相同,在接口解析,类反序列化时出现异常。Java中出现的任何元素,在Gosling的角度都会有背后的思考和逻辑(尽管并非绝对完美,但Java的顶层抽象已经是天才级了),比如:接口、抽象类、注解、和本文提到的枚举。枚举有好处,类型安全,清晰直接,还可以使用等号来判断,也可以用在switch中。它的劣势也是明显的,就是不要扩展。可是为什么在返回值和参数进行了区分呢,如果不兼容,那么两个都有问题,怎么允许参数可以有枚举。当时的考虑,如果参数也不能用,那么枚举几乎无用武之地了。参数输出,毕竟是本地决定的,你本地有的,传送过去,向前兼容是不会有问题的。但如果是接口返回,就比较恶心了,因为解析回来的这个枚举值,可能本地还没有,这时就会抛出序列化异常。比如:你的本地枚举类,有一个天气Enum:SUNNY, RAINY, CLOUDY,如果根据天气计算心情的方法:guess(WeatcherEnum xx),传入这三个值都是可以的。返回值:Weather guess(参数),那么对方运算后,返回一个SNOWY,本地枚举里没有这个值,傻眼了。

当然我觉得,一位名为Brian的网友的回答也很通俗易懂

枚举,就是把已知的全部罗列出来。作为二方/三方库的提供者,我支持什么,你们就是用什么,这样是安全的。库版本升级后我支持了更多,你不知道情况下自然不会使用,反正我不支持的参数你不可能传递给我,所以作为输入,枚举简直就是安全保障。但作为返回值,情况就反过来了。我先告诉你这些这些可以有,然后你规定这些这些可以有,除此之外都没有。但是,是我说了算而不是你,所以你的规定狗屁不是。没有仔细看手册(假设有的话)的每一个字,鬼知道升级后的api会返回什么,抛异常的可能性直趋百分百。

你们项目中,接口返回值有没有用到枚举?甚至因此出现过什么事故?留言说说吧!

来源:www.zhihu.com/question/52760637

精品资料,超赞福利!

 - 小程序,3000+ 道面试题在线刷,最新、最全 Java 面试题!

期往精选  点击标题可跳转

每日 CRUD?两年滴滴和入职头条的后端开发经验分享!共勉!

Java 8 一行代码解决了空指针的问题,太厉害了!!!

别乱提交代码了,看下大厂 Git 提交规范是怎么做的!

“80 后的人,真的该退出 IT 行业了”,某 IT 公司领导言论惹争议!

面试官 | 写 if 时不带 else,你的代码会更好!

yyds!程序员国庆长假去哪里,既小众又便宜?

我把 Spring Boot 的 banner 换成了美女,老板说工作不饱和,建议安排加班

一条简单 SQL 执行耗时超 1000ms,问题解决全过程!

为什么你 996 “猝死”,你老板 007 都没事?

文章有帮助的话,在看,转发吧!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存