枚举很好用啊!为啥阿里不建议返回值用枚举??

简介: 小伙伴说在一次接口定义时,使用了枚举,结果被其它人深深嫌弃,说不好拓展。为什么会被嫌弃呢?我们先来看看阿里开发手册关于枚举使用的建议

来源:zhihu.com/question/52760637


提问

小伙伴说在一次接口定义时,使用了枚举,结果被其它人深深嫌弃,说不好拓展。


为什么会被嫌弃呢?我们先来看看阿里开发手册关于枚举使用的建议

image.png



从手册可以看出,定义和使用枚举,阿里开发手册都是支持的,但是为啥,返回值就要反对了呢?


看看作者孤尽是怎么说的

由于升级原因,导致双方的枚举类不尽相同,在接口解析,类反序列化时出现异常。Java中出现的任何元素,在Gosling的角度都会有背后的思考和逻辑(尽管并非绝对完美,但Java的顶层抽象已经是天才级了),比如:接口、抽象类、注解、和本文提到的枚举。


枚举有好处,类型安全,清晰直接,还可以使用等号来判断,也可以用在switch中。


它的劣势也是明显的,就是不能扩展。可是为什么在返回值和参数进行了区分呢,如果不兼容,那么两个都有问题,怎么允许参数可以有枚举。当时的考虑,如果参数也不能用,那么枚举几乎无用武之地了。


参数输出,毕竟是本地决定的,你本地有的,传送过去,向前兼容是不会有问题的。但如果是接口返回,就比较恶心了,因为解析回来的这个枚举值,可能本地还没有,这时就会抛出序列化异常。


比如:你的本地枚举类,有一个天气 Enum:SUNNY, RAINY, CLOUDY,如果根据天气计算心情的方法:guess(WeatcherEnum xx),传入这三个值都是可以的。返回值:Weather guess(参数),那么对方运算后,返回一个SNOWY,本地枚举里没有这个值,傻眼了。


不过,另一位网友Brian的回答也很通俗易懂

枚举,就是把已知的全部罗列出来。作为二方/三方库的提供者,我支持什么,你们就是用什么,这样是安全的。库版本升级后我支持了更多,你不知道情况下自然不会使用,反正我不支持的参数你不可能传递给我,所以作为输入,枚举简直就是安全保障。但作为返回值,情况就反过来了。


我先告诉你这些这些可以有,然后你规定这些这些可以有,除此之外都没有。


但是,是我说了算而不是你,所以你的规定狗屁不是。没有仔细看手册(假设有的话)的每一个字,鬼知道升级后的api会返回什么,抛异常的可能性直趋百分百。


相关文章
IDEA常用插件之翻译插件
IDEA常用插件之翻译插件
603 2
|
网络协议 Linux Shell
CentOS 7系统下DHCP及中继服务部署
设备 IP地址 主DNS服务器 192.168.100.254 从DNS服务器 192.168.100.1 客户端 192.168.200.2 一、DHCP服务器的部署
740 1
|
Java Maven
Maven 在 pom.xml 文件中配置 repositories 仓库
如果你希望在你的项目中使用独立的 repositories 。 例如,你希望配置使用自己的 https://maven.ossez.com/repository/internal 作为仓库。 例如,修改后的 pom.
8424 0
|
机器学习/深度学习 存储 人工智能
ONNX 与安全:保护模型免受攻击
【8月更文第27天】随着人工智能和机器学习模型的应用越来越广泛,模型的安全性也成为了人们关注的重点。Open Neural Network Exchange (ONNX) 作为一种开放的标准格式,不仅可以促进不同框架之间的模型共享,还面临着如何保护模型不被恶意攻击的风险。本文将探讨 ONNX 在模型安全方面的考虑,以及如何利用 ONNX 和其他技术来保护模型免受攻击。
891 4
|
Java 测试技术 数据安全/隐私保护
🚀Java零基础-continue语句详解
【10月更文挑战第3天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
546 4
|
监控 容灾 测试技术
怎么保证后端服务稳定性,怎么做容灾
【10月更文挑战第25天】在实际应用中,需要根据具体的业务需求、预算和风险承受能力等因素,选择合适的稳定性保障和容灾方案,并不断优化和完善,以适应不断变化的业务环境和技术发展
|
机器学习/深度学习 人工智能 监控
足球预测:进球率预测法的接力人——AI预测
足球预测已有近200年历史,但依赖“自媒体人”推送的方式存在诸多问题。本文介绍了一种基于1990年大卫·杰克逊和K.R.莫舍斯基研究的进球率预测法,通过比较球队平均进球率来预测比赛结果。结合AI技术,该方法可批量处理数据并优化预测模型,提高预测准确性。文中还展示了AI预测的实际应用案例及代码实现,并强调了AI在赛事监控中的重要性。尽管AI预测效果显著,但仍需理性对待。
1409 1
|
安全 Unix Shell
如何在 FreeBSD 服务器上配置基于 SSH 密钥的身份验证
如何在 FreeBSD 服务器上配置基于 SSH 密钥的身份验证
357 0
|
关系型数据库 数据库 RDS
阿里云数据库加ip白名单
阿里云数据库加ip白名单
806 0
|
监控 开发工具 数据安全/隐私保护
Windows平台如何实现多路RTSP|RTMP流合成后录像或转发RTMP服务
本文介绍了在Windows平台上实现多路RTSP/RTMP视频流的合并技术。主要应用场景包括驾考、全景摄像头以及多路会议录制等。技术实现上,文章详细展示了如何使用特定的SDK来解码并回调YUV或RGB数据,再将这些数据按照图层形式进行合成。示例代码中给出了初始化参数、设置视频帧回调函数、以及如何配置不同图层的具体步骤。最终,合成后的视频可以推送到RTMP服务器、注入到本地RTSP服务,或是直接录制为MP4文件。此外,还提供了添加实时文字水印的方法,并展示了四路视频流合成后的“四宫格”效果。
743 0