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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在lambda表達式中使用的變量應(yīng)該是最終變量或有效的最終變量。

在lambda表達式中使用的變量應(yīng)該是最終變量或有效的最終變量。

人到中年有點甜 2019-07-09 14:11:34
在lambda表達式中使用的變量應(yīng)該是最終變量或有效的最終變量。在lambda表達式中使用的變量應(yīng)該是最終變量或有效的最終變量。當(dāng)我試圖用calTz它顯示了這個錯誤。private TimeZone extractCalendarTimeZoneComponent(Calendar cal,TimeZone calTz) {     try {        cal.getComponents().getComponents("VTIMEZONE").forEach(component->{         VTimeZone v = (VTimeZone) component;            v.getTimeZoneId();            if(calTz==null) {                calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue());            }            });     } catch (Exception e) {         log.warn("Unable to determine ical timezone", e);     }     return null;}
查看完整描述

3 回答

?
MMTTMM

TA貢獻1869條經(jīng)驗 獲得超4個贊

final變量意味著它只能被實例化一次。在Java中,您不能在lambda和匿名內(nèi)部類中使用非最終變量。

您可以使用舊的for-each循環(huán)重構(gòu)代碼:

private TimeZone extractCalendarTimeZoneComponent(Calendar cal,TimeZone calTz) {
    try {
        for(Component component : cal.getComponents().getComponents("VTIMEZONE")) {
        VTimeZone v = (VTimeZone) component;
           v.getTimeZoneId();
           if(calTz==null) {
               calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue());
           }
        }
    } catch (Exception e) {
        log.warn("Unable to determine ical timezone", e);
    }
    return null;}

即使我不明白這段代碼的含義:

  • 你叫.

    v.getTimeZoneId();

    而不使用其返回值
  • 帶著任務(wù)

    calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue());

    您不會修改最初傳遞的

    calTz

    而且你沒有在這個方法中使用它
  • 你總是回來

    null

    ,你為什么不

    void

    作為返回類型?

希望這些建議也能幫助你提高。


查看完整回答
反對 回復(fù) 2019-07-09
?
德瑪西亞99

TA貢獻1770條經(jīng)驗 獲得超3個贊

雖然其他答案證明了這一要求,但他們沒有解釋為什么這種要求是存在的。

JLS提到了為什么第15.27.2節(jié):

對有效的最終變量的限制禁止訪問動態(tài)變化的局部變量,這些局部變量的捕獲可能會帶來并發(fā)問題。

為了降低bug的風(fēng)險,他們決定確保捕獲的變量不會發(fā)生變異。


查看完整回答
反對 回復(fù) 2019-07-09
?
蝴蝶刀刀

TA貢獻1801條經(jīng)驗 獲得超8個贊

從lambda中,您無法獲得對任何不是最終結(jié)果的引用。您需要從Lamda外部聲明一個最后的包裝器來保存您的變量。

我添加了最后的“引用”對象作為這個包裝器。

private TimeZone extractCalendarTimeZoneComponent(Calendar cal,TimeZone calTz) {
    final AtomicReference<TimeZone> reference = new AtomicReference<>();

    try {
       cal.getComponents().getComponents("VTIMEZONE").forEach(component->{
        VTimeZone v = (VTimeZone) component;
           v.getTimeZoneId();
           if(reference.get()==null) {
               reference.set(TimeZone.getTimeZone(v.getTimeZoneId().getValue()));
           }
           });
    } catch (Exception e) {
        //log.warn("Unable to determine ical timezone", e);
    }
    return reference.get();}


查看完整回答
反對 回復(fù) 2019-07-09
  • 3 回答
  • 0 關(guān)注
  • 4958 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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