日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用枚举?

發(fā)布時間:2025/3/16 java 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用枚举? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在閱讀《阿里巴巴Java開發(fā)手冊》時,發(fā)現(xiàn)有一條關(guān)于二方庫依賴中接口返回值不允許使用枚舉類型的規(guī)約,具體內(nèi)容如下:

在談?wù)摓槭裁粗跋葋砜破障率裁词嵌綆?#xff0c;二方庫也稱作二方包,一般指公司內(nèi)部發(fā)布到中央倉庫,可供公司內(nèi)部其他應(yīng)用依賴的庫(jar 包)。

那么一方庫便是本工程內(nèi)部子項目模塊依賴的庫;三方庫為公司之外的開源庫,比如像 fastjson、easyexcel 這種。

下面我們就通過一個例子來看下為什么阿里巴巴不允許返回枚舉類型或者包含枚舉類型的 POJO 對象。

比如星巴克提供了 0.0.1 版本的二方庫,定義了一個 Starbucks 類,里面包含了枚舉類型的 SizeEnum,里面分別是中杯、大杯、特大杯。

public class Starbucks implements Serializable {private Long id;private String name;private Integer capacity;private SizeEnum sizeEum; }public enum SizeEnum {TALL(1),GRANDE(2),VENTI(3) }

定義了一個服務(wù)類,實現(xiàn)了根據(jù) id 獲取星巴克的方法:

public class StarbucksImpl implements StarbucksService {public Starbucks getStarbucksById(Long id) {Starbucks starbucks = new Starbucks();starbucks.setId(1L);starbucks.setName("Latte");starbucks.setCapacity(360);starbucks.setSizeEnum(SizeEnum.TALL);return starbucks;} }

然后,星巴克的門店引入 0.0.1 這個版本 jar 包,然后賣的好好的:

public class StarbucksDemo {@Resourceprivate StarbucksService starbucksService;public void getStarbucks() {Starbucks starbucks = starbucksService.getStarbucksById(1L);System.out.println(starbucks);} }

有一天,老羅說要那個中等大小的中杯拿鐵,但是服務(wù)員說那是大杯,經(jīng)過一番爭論,羅老師很是生氣。

于是星巴克升級到了 0.0.2 版本二方庫,在枚舉類 SizeEnum 中新增了小杯,升級后的枚舉類如下:

public enum SizeEnum {TALL(1),GRANDE(2),VENTI(3),SHORT(4) }

同時服務(wù)類的接口方法也做了相應(yīng)修改:

public class StarbucksImpl implements StarbucksService {public Starbucks getStarbucksById(Long id) {Starbucks starbucks = new Starbucks();starbucks.setId(1L);starbucks.setName("Latte");starbucks.setCapacity(240);starbucks.setSizeEnum(SizeEnum.SHORT);return starbucks;} }

由于星巴克的門店比較多,有的還不知道這個新加的需求,因此返回結(jié)果中出現(xiàn)了 SHORT,但是 0.0.1 版本的二方庫中沒有小杯啊,所以就出問題了,也就是序列化失敗。

通過這個例子,我相信大家對枚舉類型作為返回結(jié)果有了一定的理解,下面引用孤盡大佬在知乎的回答:

由于升級原因,導致雙方的枚舉類不盡相同,在接口解析,類反序列化時出現(xiàn)異常。

Java 中出現(xiàn)的任何元素,在 Gosling 的角度都會有背后的思考和邏輯(盡管并非絕對完美,但 Java 的頂層抽象已經(jīng)是天才級了),比如:接口、抽象類、注解、和本文提到的枚舉。枚舉有好處,類型安全,清晰直接,還可以使用等號來判斷,也可以用在 switch 中。它的劣勢也是明顯的,就是不要擴展。可是為什么在返回值和參數(shù)進行了區(qū)分呢,如果不兼容,那么兩個都有問題,怎么允許參數(shù)可以有枚舉。當時的考慮,如果參數(shù)也不能用,那么枚舉幾乎無用武之地了。參數(shù)輸出,畢竟是本地決定的,你本地有的,傳送過去,向前兼容是不會有問題的。但如果是接口返回,就比較惡心了,因為解析回來的這個枚舉值,可能本地還沒有,這時就會拋出序列化異常。

比如:你的本地枚舉類,有一個天氣 Enum:SUNNY, RAINY, CLOUDY,如果根據(jù)天氣計算心情的方法:guess(WeatcherEnum xx),傳入這三個值都是可以的。返回值:Weather guess(參數(shù)),那么對方運算后,返回一個 SNOWY,本地枚舉里沒有這個值,傻眼了。

總結(jié)

本文通過一個實例讓大家理解到枚舉類型作為返回結(jié)果的坑,大家可以使用基本類型或者基本類型包裝類來替換掉枚舉類型就可以避免掉這么問題了。

大家對于這條規(guī)約有什么看法,也歡迎留言討論。

有道無術(shù),術(shù)可成;有術(shù)無道,止于術(shù)

歡迎大家關(guān)注Java之道公眾號

好文章,我在看??

總結(jié)

以上是生活随笔為你收集整理的为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用枚举?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久精品99北条麻妃 | 少妇特黄a一区二区三区88av | 大地资源影视在线播放观看高清视频 | 激情久久久久久 | 久久精品视频一区二区 | 日本v视频 | av特黄 | 午夜成年人 | 超碰在线视屏 | 在线免费看av的网站 | 星空无限mv国产剧入选 | 小镇姑娘1979版 | 日韩中文字幕一区二区 | 一二三区av| 黄色网页在线免费观看 | 好吊色在线观看 | 麻豆传媒一区 | 国产精品国产精品国产专区不卡 | 欧洲自拍一区 | 龚玥菲三级露全乳视频 | 久久久久久九九九九 | 久久网站免费观看 | 自拍偷拍视频网站 | 奇米影视四色777 | 国产第一色 | 久久夜靖品2区 | 免费一级毛片麻豆精品 | 亚洲图片 自拍偷拍 | 国模二区 | 中文字幕一区二区三区精品 | 中国特级黄色大片 | 国产成人精品无码高潮 | aaa成人| 日韩手机在线视频 | 亚洲免费a| 亚洲永久精品国产 | 日韩精品视频免费看 | 亚洲第一国产视频 | 超碰在线最新 | 日韩中文字幕在线观看 | 亲子乱aⅴ一区二区三区 | 国产欧美一区二区在线观看 | www网站在线免费观看 | 免费在线观看中文字幕 | 亚洲视频99 | 国产亚洲色婷婷久久99精品91 | 无套爆插| 僵尸叔叔在线观看国语高清免费观看 | 成人自拍偷拍 | 日韩av电影中文字幕 | 天天色一色 | 最新一区二区三区 | 欧美日韩视频一区二区 | 欧美人与性动交ccoo | 葵司免费一区二区三区四区五区 | 筱田优全部av免费观看 | 精品人妻无码一区二区三 | 中文字幕巨乳 | 欧美日韩伊人 | 久久久久逼| 自拍偷拍激情视频 | 超碰在线a | 国产一二三区免费视频 | 三上悠亚中文字幕在线播放 | 亚洲精品一区二区三区蜜桃 | 日韩欧美精品免费 | 国产6区| 欧美一区二区人人喊爽 | 免费一级淫片aaa片毛片a级 | 一区二区亚洲视频 | 91香蕉视频官网 | 五月天激情丁香 | 国产精品羞羞答答在线观看 | 欧美五月激情 | 亚洲 欧美 精品 | www.色中色| 欧美极品在线视频 | 久久久www | 蝌蚪久久 | 亚洲超碰av | 中国极品少妇videossexhd 就要干就要操 | 捆绑最紧bdsm视频 | 玖玖zyz | 岛国av片 | 水牛影视av一区二区免费 | 午夜精品久久久久久久久久久 | 国产亚洲福利 | 依人成人 | 午夜免费福利网站 | 国产偷亚洲偷欧美偷精品 | 日本美女日批视频 | 一本久久道 | 久久精品久久精品久久 | 少妇特黄一区二区三区 | 亚洲一区二区色 | 涩色网 | 一级v片| 国产原创91 | 欧美日韩精品一区二区三区视频播放 |