rest api 可选参数_可选类型API
rest api 可選參數
Java 8引入了Optional類。 簡而言之,不是返回null,而是檢查null,而是返回Optional實例,該實例可以設置值,也可以不設置值。 這樣,您不會因NullPointerException而失敗。
我不會討論Optional類型是否會完全消除NPE(不會)。 相反,我將從不同的角度討論問題-API設計。 除了Java的Optional外,我還將顯示guava的Optional和scala的Option ,并進行比較。
正如Joshua Bloch所建議的,API應該盡可能小,但不能小。 API的概念權重應最小化,如果您想知道是否在API中包含某些內容,則應將其忽略。 API應該易于使用,并且難以濫用,并且理想情況下應該具有一個(或兩個)主要使用模式。 Optional類型是必須做出所有這些選擇的一個很好的例子。
這的默認用法是什么? 您將獲得一個可選類型,并且僅在設置了值的情況下才想執行一些代碼。 您顯然可以通過將它與null進行比較來做到這一點,但是您常常會忘記這一點,而可選類型迫使您意識到此值實際上是可以設置的。 第二個重要用例是,如果未設置默認值,則能夠輕松提供默認值。
讓我們首先從三個方面中最差的一個開始(我認為)– scala的Option 。 最初,此類似乎為您提供了許多功能。 但是,正如scala的正常做法一樣,有很多不同的方法來使用類,但沒有一種方法比其他方法更好。 對我而言,這種情況下特別糟糕的決定是使Option (隱式)轉換為Iterable 。 對于非scala開發人員,讓我們假設它是Iterable 。 但是它只能有一個或零個元素。 因此,為了實現我們的默認和最常見的用例,我們提供以下選項:
- if (option.nonEmpty) {option.get.doSomething()}請使用命令式樣式
- 使用.foreach – option.foreach(v => v.doSomething)
- 使用foreach循環(與上面不同): for (value <- option) {value.doSomething()}
- 使用a來理解(用于…收益率)(與上述兩項不同)
- 使用模式匹配- case Some與case None
- 使用地圖,折疊,收集等–這使過程更進一步–不僅獲得了價值,而且還對其應用了一些功能
因此,從可選類型的基本概念來看,我們有一個包含數十種方法的類。 這個API在概念上很重要。 沒有明顯的首選方法可以處理最常見的情況,實際上,許多scala開發人員首選的方法使用某種形式的foreach,當您知道最多有一個值時,這聽起來有些怪異。
現在,讓我們繼續第二名候選人-Java 8 Optional 。 您只有兩種使用方式:使用if子句的命令式檢查和ifPresent(function)方法,其中提供了一個在有??值時處理代碼的函數。 您還可以使用幾個重載方法來提供默認值(第二個用例)。 我不喜歡的是map , flatMap和filter方法。 與上面的scala一樣,它們很有用,但是可以將其忽略(它們的用法分開處理,幾乎沒有增加的冗長性),也可以將它們簡化為一個函數-map。 它與flatMap有細微的差別,并且過濾單個元素并不是最有用的方法,此外,您可以使用map函數來實現。
我知道到目前為止,您可能已經準備好(惱怒地)問您將如何編寫非常簡潔的代碼,而沒有折疊,收集,flatMap,過濾器的功能。 在使用給定的可選類型執行操作后返回另一個可選類型是第三個用例,這對于長方法很重要。 它不如其他兩個常見,因此應注意較少。 理想情況下,一種方法就足夠了,所有其他子用例都可以在map函數本身中處理。
因此,我們找到了贏家–番石榴Optional 。 它僅具有處理第一個用例的必要方法(因為它是為缺少一流功能的Java版本開發的)。 上面的第二個和第三個用例具有盡可能少的方法( or和transform(..) )。 輕量級API,可以用相同數量的代碼實現幾乎相同的事情。
實際上,針對主要用例采用功能性方法不一定是好方法–擁有Optional類型的意義不在于在功能上可以使用它–要使這一點意識到,價值可能不存在。 我并不是說要在scala和Java8中擺脫它,但也許可以重新考慮.isPresent()和.get() 。
最重要的是–很難設計API。 就簡單類型而言,即使是簡單的東西,在主要和次要美國用例方面也需要考慮很多方面,是否需要方便的方法,或者它們會給API帶來不必要的復雜性,并且可以用其他方法處理(不是一定更冗長)。
最后-在可能返回null的情況下使用可選類型-NPE易于調試和修復,但容易遺漏并且可能在錯誤的時刻發生。
翻譯自: https://www.javacodegeeks.com/2014/03/the-optional-type-api.html
rest api 可選參數
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的rest api 可选参数_可选类型API的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: ddos指的是什么(ddos表示什么)
- 下一篇: 用Java对HashMap排序
