共计 1053 个字符,预计需要花费 3 分钟才能阅读完成。
起源:zhihu.com/question/52760637
发问
小伙伴说在一次接口定义时,应用了枚举,后果被其它人深深厌弃,说不好拓展。
为什么会被厌弃呢?咱们先来看看阿里开发手册对于枚举应用的倡议
从手册能够看出,定义和应用枚举,阿里开发手册都是反对的,然而为啥,返回值就要拥护了呢?
看看作者孤尽是怎么说的
因为降级起因,导致单方的枚举类不尽相同,在接口解析,类反序列化时出现异常。Java 中呈现的任何元素,在 Gosling 的角度都会有背地的思考和逻辑(只管并非相对完满,但 Java 的顶层形象曾经是蠢才级了),比方:接口、抽象类、注解、和本文提到的枚举。
枚举有益处,类型平安,清晰间接,还能够应用等号来判断,也能够用在 switch 中。
它的劣势也是显著的,就是不能扩大。可是为什么在返回值和参数进行了辨别呢,如果不兼容,那么两个都有问题,怎么容许参数能够有枚举。过后的思考,如果参数也不能用,那么枚举简直无用武之地了。
参数输入,毕竟是本地决定的,你本地有的,传送过来,向前兼容是不会有问题的。但如果是接口返回,就比拟恶心了,因为解析回来的这个枚举值,可能本地还没有,这时就会抛出序列化异样。
比方:你的本地枚举类,有一个天气 Enum:SUNNY, RAINY, CLOUDY,如果依据天气计算情绪的办法:guess(WeatcherEnum xx),传入这三个值都是能够的。返回值:Weather guess(参数),那么对方运算后,返回一个 SNOWY,本地枚举里没有这个值,傻眼了。
不过,另一位网友 Brian 的答复也很通俗易懂
枚举,就是把已知的全副列举进去。作为二方 / 三方库的提供者,我反对什么,你们就是用什么,这样是平安的。库版本升级后我反对了更多,你不晓得状况下天然不会应用,反正我不反对的参数你不可能传递给我,所以作为输出,枚举几乎就是平安保障。但作为返回值,状况就反过来了。
我先通知你这些这些能够有,而后你规定这些这些能够有,除此之外都没有。
然而,是我说了算而不是你,所以你的规定狗屁不是。没有认真看手册 (假如有的话) 的每一个字,鬼晓得降级后的 api 会返回什么,抛异样的可能性直趋百分百。
近期热文举荐:
1.1,000+ 道 Java 面试题及答案整顿(2021 最新版)
2. 别在再满屏的 if/ else 了,试试策略模式,真香!!
3. 卧槽!Java 中的 xx ≠ null 是什么新语法?
4.Spring Boot 2.5 重磅公布,光明模式太炸了!
5.《Java 开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞 + 转发哦!