枚舉很好用??!為啥阿里不建議返回值用枚舉??碼農(nóng)有道公眾號關(guān)注共 1035字,需瀏覽 3分鐘 ·2021-10-25 21:42 閱讀本文大概需要 2.8 分鐘。來自:zhihu.com/question/52760637提問小伙伴說在一次接口定義時(shí),使用了枚舉,結(jié)果被其它人深深嫌棄,說不好拓展。為什么會被嫌棄呢?我們先來看看阿里開發(fā)手冊關(guān)于枚舉使用的建議從手冊可以看出,定義和使用枚舉,阿里開發(fā)手冊都是支持的,但是為啥,返回值就要反對了呢?看看作者孤盡是怎么說的由于升級原因,導(dǎo)致雙方的枚舉類不盡相同,在接口解析,類反序列化時(shí)出現(xiàn)異常。Java中出現(xiàn)的任何元素,在Gosling的角度都會有背后的思考和邏輯(盡管并非絕對完美,但Java的頂層抽象已經(jīng)是天才級了),比如:接口、抽象類、注解、和本文提到的枚舉。枚舉有好處,類型安全,清晰直接,還可以使用等號來判斷,也可以用在switch中。它的劣勢也是明顯的,就是不能擴(kuò)展。可是為什么在返回值和參數(shù)進(jìn)行了區(qū)分呢,如果不兼容,那么兩個(gè)都有問題,怎么允許參數(shù)可以有枚舉。當(dāng)時(shí)的考慮,如果參數(shù)也不能用,那么枚舉幾乎無用武之地了。參數(shù)輸出,畢竟是本地決定的,你本地有的,傳送過去,向前兼容是不會有問題的。但如果是接口返回,就比較惡心了,因?yàn)榻馕龌貋淼倪@個(gè)枚舉值,可能本地還沒有,這時(shí)就會拋出序列化異常。比如:你的本地枚舉類,有一個(gè)天氣 Enum:SUNNY, RAINY, CLOUDY,如果根據(jù)天氣計(jì)算心情的方法:guess(WeatcherEnum xx),傳入這三個(gè)值都是可以的。返回值:Weather guess(參數(shù)),那么對方運(yùn)算后,返回一個(gè)SNOWY,本地枚舉里沒有這個(gè)值,傻眼了。不過,另一位網(wǎng)友Brian的回答也很通俗易懂枚舉,就是把已知的全部羅列出來。作為二方/三方庫的提供者,我支持什么,你們就是用什么,這樣是安全的。庫版本升級后我支持了更多,你不知道情況下自然不會使用,反正我不支持的參數(shù)你不可能傳遞給我,所以作為輸入,枚舉簡直就是安全保障。但作為返回值,情況就反過來了。我先告訴你這些這些可以有,然后你規(guī)定這些這些可以有,除此之外都沒有。但是,是我說了算而不是你,所以你的規(guī)定狗屁不是。沒有仔細(xì)看手冊(假設(shè)有的話)的每一個(gè)字,鬼知道升級后的api會返回什么,拋異常的可能性直趨百分百。 瀏覽 23點(diǎn)贊 評論 收藏 分享 手機(jī)掃一掃分享分享 舉報(bào) 評論圖片表情視頻評價(jià)全部評論推薦 枚舉很好用??!為啥阿里不建議返回值用枚舉??全棧架構(gòu)社區(qū)0枚舉很好用啊!為啥阿里不建議返回值用枚舉??程序員的成長之路0枚舉很好用??!為啥阿里不建議返回值用枚舉??開發(fā)者全社區(qū)0枚舉很好用啊!為啥阿里不建議返回值用枚舉??我是程序汪0ReflectableEnum枚舉ReflectableEnum 是引入枚舉反射的一組函數(shù)和 宏,用 Objective-C 寫成。特ReflectableEnum枚舉ReflectableEnum是引入枚舉反射的一組函數(shù)和宏,用Objective-C寫成。特性:獲得枚舉的成員的字符串值(whichisacommonproblem)獲取所有在枚舉中使用的值(alsoFastjson 處理枚舉SegmentFault040 枚舉類型二級C語言必過教程0TS基礎(chǔ)之枚舉擴(kuò)展知識——位枚舉人生不止有技術(shù)0枚舉其實(shí)很有用,用對了能避免不少Bug呢猿天地0點(diǎn)贊 評論 收藏 分享 手機(jī)掃一掃分享分享 舉報(bào)