簡體   English   中英

_(下划線)是保留關鍵字

[英]_ (underscore) is a reserved keyword

我剛剛將以下 lambda 表達式中的s替換為_

s -> Integer.parseInt(s)

Eclipse 編譯器說:

'_' 不應用作標識符,因為它是源代碼級別 1.8 之后的保留關鍵字。

我在JLS §3.9詞法結構/關鍵字中沒有找到任何解釋。

要看的地方是JLS §15.27.1。 Lambda 參數

如果 lambda 參數具有名稱 _(即單個下划線字符),則會出現編譯時錯誤。

不鼓勵在任何上下文中使用變量名稱 _。 Java 編程語言的未來版本可能會將此名稱保留為關鍵字和/或賦予它特殊的語義。

因此 Eclipse 消息具有誤導性,尤其是在兩種情況下使用相同的消息時,當為 lambda 參數生成錯誤或為任何其他_標識符生成警告時。

這是JEP 302的第 2 階段,將添加下划線作為特殊字符來表示 lambda 表達式中未使用的參數。

下划線的處理

在許多語言中,通常使用下划線 ( _ ) 來表示未命名的 lambda 參數(對於方法和異常參數也是如此):

BiFunction<Integer, String, String> biss = (i, _) -> String.valueOf(i);

這允許對未使用的參數進行更強的靜態檢查,並且還允許將多個參數標記為未使用。 然而,因為下划線是 Java 8 的有效標識符,兼容性要求我們采取更間接的路徑來到達下划線在 Java 中可以發揮這一作用的地方。 階段 1 禁止在 Java 8 中將下划線作為 lambda 形式參數名稱(這沒有兼容性后果,因為之前不存在 lambdas)並且發出警告以在其他地方使用下划線作為標識符。 第 2 階段出現在 Java 9 中,當此警告變成錯誤時。 我們現在可以自由完成下划線的計划修復,以指示未使用的 lambda、方法或捕獲形式參數。

Java SE 9 的 Java 語言更改https://docs.oracle.com/javase/9​​/language/toc.htm#JSLAN-GUID-16A5183A-DC0D-4A96-B9D8-AAC9671222DD

從 Java 9 開始,_ 字符不能再用作標識符,而不僅僅是在 lambda 上下文中

下划線字符不是合法名稱。

如果您使用下划線字符(“_”)作為標識符,您的源代碼將無法再編譯。

暫無
暫無

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

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