[英]_ (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.