第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

創(chuàng)建一個(gè)類變量只是為了在 Optional.ifPresentOrElse 中使用是一種應(yīng)該避免

創(chuàng)建一個(gè)類變量只是為了在 Optional.ifPresentOrElse 中使用是一種應(yīng)該避免

弒天下 2023-05-10 17:08:17
簡而言之,我的上下文是:調(diào)用一個(gè) API,如果我找到某個(gè)標(biāo)頭變量,我將其子字符串化以返回一個(gè)值。如果不是,我必須返回 Response.status。我已經(jīng)用這段代碼成功地達(dá)到了這樣的要求:...import com.mashape.unirest.*...@Controllerpublic class MainController {    private final String gmailKey = "XXX";    private String stringRetorno = "0";    @ResponseBody    @GetMapping("/getsessionkey")    public String getSessionKey() {        try {            HttpResponse<String> response = Unirest                    .post("https://skyscanner-skyscanner-flight-search-v1.p.rapidapi.com/apiservices/pricing/v1.0")                    .header("x-rapidapi-host", "skyscanner-skyscanner-flight-search-v1.p.rapidapi.com")                    .header("x-rapidapi-key", gmailKey).header("Content-Type", "application/x-www-form-urlencoded")                    .body("inboundDate=2019-11-25&cabinClass=economy&children=0&infants=0&Country=BR&Currency=BRL&locale=pt-BR&originPlace=GRU-sky&destinationPlace=MCZ-sky&outboundDate=2019-11-19&adults=2")                    .asString();            Optional<String> optionalLocation = Optional.ofNullable(response.getHeaders().getFirst("Location"));            optionalLocation.ifPresentOrElse(l -> stringRetorno = l.substring(l.lastIndexOf("/") + 1),                    () -> stringRetorno = String.valueOf(response.getStatus()));        } catch (Exception e) {            e.printStackTrace();        }        return stringRetorno;    }我的懷疑取決于我編碼的正確程度。我沒有編寫 if&null 鏈,而是決定使用 Optional 的更優(yōu)雅和更易讀的方式。但是如果我在方法內(nèi)部創(chuàng)建 stringRetorno,我會(huì)面臨“在封閉范圍內(nèi)定義的局部變量 stringRetorno 必須是最終的或有效的最終”。四處搜索我發(fā)現(xiàn)作為解決方案創(chuàng)建 stringRetorno 作為類變量。所以我的直截了當(dāng)?shù)膯栴}是:我是不是在做一些要避免的事情?一些可能無法回答我的問題但非常有用的問題是:我是否應(yīng)該更喜歡其他 Java HTTP 客戶端而不是 com.mashape.unirest ,它可能已經(jīng)提供了 Optional 這樣我就可以編寫不那么冗長的代碼?我根本不想比較圖書館。我的重點(diǎn)是與接收缺少特定鍵(位置)的響應(yīng)標(biāo)頭的可能性相結(jié)合。而且,如果 API 提供者建議的輕量級(jí) unirest 迫使我采取變通辦法,那么另一個(gè)提供 Optional 作為答案的庫的建議應(yīng)該對我有所幫助。在 Try/Catch 塊中寫 Optional 不是很費(fèi)勁嗎?
查看完整描述

3 回答

?
MMMHUHU

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊

@ResponseBody

@GetMapping("/getsessionkey")

public String getSessionKey() {


    Optional<String> optionalLocation = null;

    HttpResponse<String> response = null;

    try {


        response = Unirest

                .post("https://skyscanner-skyscanner-flight-search-v1.p.rapidapi.com/apiservices/pricing/v1.0")

                .header("x-rapidapi-host", "skyscanner-skyscanner-flight-search-v1.p.rapidapi.com")

                .header("x-rapidapi-key", gmailKey).header("Content-Type", "application/x-www-form-urlencoded")


                .body("inboundDate=2019-11-25&cabinClass=economy&children=0&infants=0&Country=BR&Currency=BRL&locale=pt-BR&originPlace=GRU-sky&destinationPlace=MCZ-sky&outboundDate=2019-11-19&adults=2")

                .asString();


        optionalLocation = Optional.ofNullable(response.getHeaders().getFirst("Location"));


    } catch (Exception e) {

        e.printStackTrace();

    }


    return optionalLocation.map(l -> l.substring(l.lastIndexOf("/") + 1))

            .orElse(String.valueOf(response.getStatus()));


}


查看完整回答
反對 回復(fù) 2023-05-10
?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊

我正在做一些要避免的事情嗎?

是的。將變量拉出與其相關(guān)的唯一方法之外是一種糟糕的形式。此外,實(shí)際上,它會(huì)為您帶來線程安全問題——正如目前所寫的那樣,使用您的類并允許調(diào)用兩個(gè)不同線程的程序可能因此無法正確同步MainController.getSessionKey()。如果它是方法的局部變量,情況就不一樣了。

如果它是字符串的可變?nèi)萜?/em>(例如數(shù)組、List或) ,則可以使用該方法的本地變量。AtomicReference然后容器可以是最終的或?qū)嶋H上是最終的,而不會(huì)阻止您更改其內(nèi)容。

但是使用map()和的組合會(huì)更干凈orElse(),這樣您就不需要首先使用 lambda 設(shè)置字符串引用:

stringRetorno = optionalLocation.map(l -> l.substring(l.lastIndexOf("/") + 1))
        .orElse(String.valueOf(response.getStatus()));
  • 我是否應(yīng)該更喜歡其他 Java HTTP 客戶端而不是 com.mashape.unirest ,它可能已經(jīng)提供了 Optional 這樣我就可以編寫不那么冗長的代碼?

也許我誤解了,但我從中看到的唯一代碼節(jié)省是刪除調(diào)用Optional.ofNullable()(但保留其參數(shù)的等價(jià)物)。這并沒有減少多少冗長,也沒有多少(如果有的話)清晰度的提高。我不會(huì)認(rèn)為這樣做的可能性是尋找不同客戶的任何理由。

(但如果您確實(shí)在尋找不同的客戶,請不要看這里。對圖書館和其他場外資源的推薦在這里是題外話。)

  • 在 Try/Catch 塊中寫 Optional 不是很費(fèi)勁嗎?

不?也許“壓倒性”不是您要查找的術(shù)語,但即使您的意思真的是“矯枉過正”或“過度”或類似的意思,也仍然不是。我什至不明白為什么你認(rèn)為它可能是這樣。


查看完整回答
反對 回復(fù) 2023-05-10
?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊

ifPresentOrElse可能不是您要使用的方法,而是.orElse.

return optionalLocation.orElse(String.valueOf(response.getStatus()));

ifPresentOrElse當(dāng)可選項(xiàng)為空時(shí),如果您想執(zhí)行某些操作(例如日志記錄),您會(huì)想要使用。


查看完整回答
反對 回復(fù) 2023-05-10
  • 3 回答
  • 0 關(guān)注
  • 247 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)