簡體   English   中英

非最終變量上的Java8有效最終編譯時錯誤

[英]Java8 Effectively Final compile time error on non final variable

我正在嘗試將 java8 forEach 循環中的布爾變量更改為非最終的 true。 但我收到以下錯誤:在封閉范圍內定義的局部變量必須是最終的或有效的最終變量。

如何解決此錯誤?

代碼 :

boolean required = false; 

這是我在函數中創建的變量。

現在當我試圖改變它時:

   map.forEach((key, value) -> {
        System.out.println("Key : " + key + " Value : " + value);
        required = true;
    });

我收到錯誤:在封閉范圍內定義的局部變量必須是最終的或有效的最終變量。

為什么會出現此錯誤以及如何解決?

您不能從 lambda 表達式的主體更改局部變量。 有幾種方法可以克服這個問題:

  • 在這種特殊情況下,您只需設置boolean required = !map.isEmpty(); 沒有任何 lambda 表達式。 如果要根據某些條件進行設置,可以使用 Stream API:

     boolean required = map.entrySet().stream().anyMatch(entry -> ...);

    該解決方案是最優選的。

  • required變量轉換為封閉類的字段。

  • 最臟的方法:聲明一個單元素數組: boolean[] required = {false}; 並改為設置此元素: required[0] = true;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM