java1.9关键字_对 Java 9 把单个下划线作为关键字的猜想
我們知道 Java 的合法命名是以字母或下劃線開頭的字符串,當然,以前單個下劃線 _?也是一個合法的變量命名。但是自 Java 8 的第一個版本開始,單個下劃線的變量名編譯時會有警告
int _ = 99;
用 Java 8 編譯時提示警告:
Test.java:2: warning: '_' used as an identifier
int _ = 99;
^
(use of '_' as an identifier might not be supported in releases after Java SE 8)
1 warning
這正是為 Java 9 作的預謀,以一個 LTS 版的 Java 8 作為過渡。因此,來到了 Java 9 后,單個下劃線不再擔當普通變量名的角色,變成了一個保留關鍵字,只說是另有任用。
先來看下 Java 9 中的單個下劃線變量名編譯時的錯誤提示
Test.java:2: error: as of release 9, '_' is a keyword, and may not be used as an identifier
int _ = 99;
^
1 error
到底單下劃線會作為什么用途呢? 已發布的 Java 10 沒有給出答案,正在演進中的 Java 11 也沒有相關的信息。
于是我對單個下劃線的保留功能的猜測,像 Scala 那樣可能是要把 _?用作匿名參數(或者叫做參數點位符)
List("a", "b")
.map(_.toUpperCase + "X")
.foreach(println(_))
1
2
3
List("a","b")
.map(_.toUpperCase+"X")
.foreach(println(_))
上面的 Scala 代碼中,_?代表遍歷的元素本身,完整寫法是
List("a", "b")
.map(e => e.toUpperCase + "X")
.foreach(e => println(e))
1
2
3
List("a","b")
.map(e=>e.toUpperCase+"X")
.foreach(e=>println(e))
Java 也有一個比 Scala 高級的地方,那就是方法引用。類似的用 Java 的方法引用改寫上面的代碼
List.of("a", "b")
.map(String::toUpperCase)
.foreach(System.out::println)
1
2
3
List.of("a","b")
.map(String::toUpperCase)
.foreach(System.out::println)
Java 的 Lambda 只能做到這樣的了,它的方法引用容不得更多的轉換操作。對于
e -> e.toUpperCase() + "X"
//或
e -> System.out.println(e.toSupperCase())
1
2
3
e->e.toUpperCase()+"X"
//或
e->System.out.println(e.toSupperCase())
凡是操作前的參數變化或操作后結果需變化的 Lambda? 都無法轉換成方法引用。
Groovy 也有類似 Scala 的 _?用法,只是它用的變量名是 it, 它不完全是 Groovy 的關鍵字
["a", "b"].forEach {
println(it.toLowerCase())
}
1
2
3
["a","b"].forEach{
println(it.toLowerCase())
}
Scala 除了 Lambda 中用作點位符外,還能用在模式匹配中,類似于 switch..case 語句中的 default?部分。
總結
以上是生活随笔為你收集整理的java1.9关键字_对 Java 9 把单个下划线作为关键字的猜想的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matlab中newff函数使用方法和搭
- 下一篇: Matlab中特征降维主成分分析(PCA