<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          枚舉很好用啊!為啥阿里不建議返回值用枚舉??

          共 1224字,需瀏覽 3分鐘

           ·

          2021-10-25 23:54

          程序員的成長(zhǎng)之路
          互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享?
          關(guān)注


          閱讀本文大概需要 2.8 分鐘。

          來(lái)自:zhihu.com/question/52760637

          提問(wèn)

          小伙伴說(shuō)在一次接口定義時(shí),使用了枚舉,結(jié)果被其它人深深嫌棄,說(shuō)不好拓展。
          為什么會(huì)被嫌棄呢?我們先來(lái)看看阿里開(kāi)發(fā)手冊(cè)關(guān)于枚舉使用的建議
          從手冊(cè)可以看出,定義和使用枚舉,阿里開(kāi)發(fā)手冊(cè)都是支持的,但是為啥,返回值就要反對(duì)了呢?

          看看作者孤盡是怎么說(shuō)的

          由于升級(jí)原因,導(dǎo)致雙方的枚舉類(lèi)不盡相同,在接口解析,類(lèi)反序列化時(shí)出現(xiàn)異常。Java中出現(xiàn)的任何元素,在Gosling的角度都會(huì)有背后的思考和邏輯(盡管并非絕對(duì)完美,但Java的頂層抽象已經(jīng)是天才級(jí)了),比如:接口、抽象類(lèi)、注解、和本文提到的枚舉。
          枚舉有好處,類(lèi)型安全,清晰直接,還可以使用等號(hào)來(lái)判斷,也可以用在switch中。
          它的劣勢(shì)也是明顯的,就是不能擴(kuò)展??墒菫槭裁丛诜祷刂岛蛥?shù)進(jìn)行了區(qū)分呢,如果不兼容,那么兩個(gè)都有問(wèn)題,怎么允許參數(shù)可以有枚舉。當(dāng)時(shí)的考慮,如果參數(shù)也不能用,那么枚舉幾乎無(wú)用武之地了。
          參數(shù)輸出,畢竟是本地決定的,你本地有的,傳送過(guò)去,向前兼容是不會(huì)有問(wèn)題的。
          但如果是接口返回,就比較惡心了,因?yàn)榻馕龌貋?lái)的這個(gè)枚舉值,可能本地還沒(méi)有,這時(shí)就會(huì)拋出序列化異常。
          比如:你的本地枚舉類(lèi),有一個(gè)天氣 Enum:SUNNY, RAINY, CLOUDY,如果根據(jù)天氣計(jì)算心情的方法:guess(WeatcherEnum xx),傳入這三個(gè)值都是可以的。
          返回值:Weather guess(參數(shù)),那么對(duì)方運(yùn)算后,返回一個(gè)SNOWY,本地枚舉里沒(méi)有這個(gè)值,傻眼了。

          不過(guò),另一位網(wǎng)友Brian的回答也很通俗易懂

          枚舉,就是把已知的全部羅列出來(lái)。作為二方/三方庫(kù)的提供者,我支持什么,你們就是用什么,這樣是安全的。
          庫(kù)版本升級(jí)后我支持了更多,你不知道情況下自然不會(huì)使用,反正我不支持的參數(shù)你不可能傳遞給我,所以作為輸入,枚舉簡(jiǎn)直就是安全保障。
          但作為返回值,情況就反過(guò)來(lái)了。
          我先告訴你這些這些可以有,然后你規(guī)定這些這些可以有,除此之外都沒(méi)有。但是,是我說(shuō)了算而不是你,所以你的規(guī)定狗屁不是。
          沒(méi)有仔細(xì)看手冊(cè)(假設(shè)有的話)的每一個(gè)字,鬼知道升級(jí)后的api會(huì)返回什么,拋異常的可能性直趨百分百。

          推薦閱讀:

          互聯(lián)網(wǎng)企業(yè)黑名單

          面試官:說(shuō)說(shuō) Spring 事務(wù)設(shè)計(jì)原理?面試必問(wèn)!

          最近面試BAT,整理一份面試資料《Java面試BATJ通關(guān)手冊(cè)》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點(diǎn)個(gè)「在看」,點(diǎn)擊上方小卡片,進(jìn)入公眾號(hào)后回復(fù)「面試題」領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          朕已閱?

          瀏覽 74
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线亚洲免费 | 日韩精品AV电影 | 天天影视网色欲 | 黄色污污污污污网站在线观看 | 婷婷精品视频 |