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

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

来源:zhihu.com/question/52760637


提问

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


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

image.png



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


看看作者孤尽是怎么说的

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


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


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


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


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


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

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


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


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


相关文章
|
3月前
|
存储 编译器 Shell
【C++基础语法 枚举】解析 C/C++ 中枚举类型大小值
【C++基础语法 枚举】解析 C/C++ 中枚举类型大小值
43 0
|
3月前
|
C语言
|
3月前
|
安全 算法 编译器
【C++基础语法 枚举】C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法
【C++基础语法 枚举】C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法
47 2
|
2月前
|
编译器 C语言
C语言枚举:深入探索下标默认值、自定义值及部分自定义情况
C语言枚举:深入探索下标默认值、自定义值及部分自定义情况
18 0
|
2月前
详细解读COM中集合和枚举器笔记(2)枚举器内部实现
详细解读COM中集合和枚举器笔记(2)枚举器内部实现
13 0
|
8月前
枚举的使用和注意事项
枚举的使用和注意事项
34 0
|
11月前
巧用枚举替代if
巧用枚举替代if
|
C语言
C语言 枚举,枚举设置指定值
数据类型,该整型类型有 6 个数据,默认是从 0 开始,依次递增一个。 yellow 是0 的名字,可以直接使用yellow代替0,yellow 不是变量名,就是一个名字,代表数字0.
88 0
C语言——enum枚举实例、知识点。使用枚举,减少相同定义步骤,简洁数据1.1.5
枚举是C语言常见的一种基本数据类型,它可以避免多个整数定义的麻烦,使代码整洁干净易读如此一看,就觉得繁琐无比,大量重复#define xx明显增加代码量,且数值需自己一一对应而枚举,可以解决这种定义连续数值的过程当变量第一个值未自定义时,第一个枚举成员的默认值则为整型0,后续成员值依次加1,如此时MON=0,TUE=1,WED=2·····.........
C语言——enum枚举实例、知识点。使用枚举,减少相同定义步骤,简洁数据1.1.5
|
设计模式 Java 开发者
实战小技巧6:枚举的特殊用法
难道我们日常使用的枚举还有什么特殊的玩法不成?没错,还真有,本文主要介绍枚举的两种不那么常见的使用姿势
129 0