<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>

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

          共 1097字,需瀏覽 3分鐘

           ·

          2021-11-10 02:17


          來自:zhihu.com/question/52760637

          提問

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

          看看作者孤盡是怎么說的

          由于升級原因,導致雙方的枚舉類不盡相同,在接口解析,類反序列化時出現(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,本地枚舉里沒有這個值,傻眼了。

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

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


          PS:如果覺得我的分享不錯,歡迎大家隨手點贊、轉(zhuǎn)發(fā)、在看。

          PS:歡迎在留言區(qū)留下你的觀點,一起討論提高。如果今天的文章讓你有新的啟發(fā),歡迎轉(zhuǎn)發(fā)分享給更多人。

          瀏覽 31
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  国产精品6区| 女人操女人一级毛片 | 草b视频| 国产精品内射 | 欧美日本一级二级三级 |