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 把单个下划线作为关键字的猜想相关推荐
- 【Java工具类】(1)—Java中驼峰与下划线相互转换
Java工具类(1)-Java中驼峰与下划线相互转换 1.驼峰命名法 /** * 驼峰式命名法 */ public static String toCamelCase(String s) {if (s ...
- final关键字_深入分析Java中的final关键字
Java中被final修饰的变量与普通变量有何区别?被final修饰的变量不可更改.被final修饰的方法不可重写是怎样做到的?带着疑问我们一点点拨开云雾. 一.final的内存定义及规则 对于fin ...
- java中变量 关键字_基于java的voliate关键字详解
voliate关键字的作用: 一.内存可见性 基于缓存一致性协议,当用voliate关键字修饰的变量改动时,cpu会通知其他线程,缓存已被修改,需要更新缓存.这样每个线程都能获取到最新的变量值. 二. ...
- java正则表达式 字母数字下划线_字母数字下划线常用正则表达式
1.由数字.26个英文字母或者下划线组成的字符串: ^[0-9a-zA-Z_]{1,}$ 2.非负整数(正整数 + 0 ): ^/d+$ 3. 正整数: ^[0-9]*[1-9][0-9]*$ 4.非 ...
- java数字分割的下划线_在Java中使用下划线分隔数的字面值的用法讲解
在Java SE 7中新增了以二进制形式的字面值表示方式,你可以像使用十进制一样,方便地使用二进制形式的字面值来表示数值. 例如: // 一个8位的byte值: byte aByte = 0b1000 ...
- python怎么打下划线符号_详解 Python 中的下划线命名规则
在 python 中,下划线命名规则往往令初学者相当 疑惑:单下划线.双下划线.双下划线还分前后--那它们的作用与使用场景 到底有何区别呢?今天 就来聊聊这个话题. 1.单下划线(_) 通常情况下,单 ...
- 【Python】标识符 ( Python 标识符命名规则 - 强制性 | 内容限定 | 大小写敏感 | 非关键字 | Python 标识符命名规范 - 建议性 | 下划线命名法 | 英文字母全小写 )
文章目录 一.Python 标识符 1.Python 标识符命名规则 ( 强制性 ) 2.Python 标识符命名规范 ( 建议性 ) 二.代码示例 1.内容限定代码示例 2.大小写敏感 3.非关键字 ...
- Python中单个下划线“ _”变量的用途是什么?
这段代码中_ after for的含义是什么? if tbh.bag:n = 0for _ in tbh.bag.atom_set():n += 1 #1楼 下划线_在Python中被视为" ...
- Python中单个下划线“_”变量的目的是什么?
在Python中,下划线_被视为" 我不关心 "或" 丢失 "变量 python解释器将最后一个表达式值存储到名为的特殊变量中_. >>> 1 ...
最新文章
- Oracle函数的定义
- Dart 2.2 发布,谷歌推出的结构化编程语言
- 为应用程序池 ''DefaultAppPool'' 提供服务的进程意外终止。进程 ID 是 ''xxx''问题的解决方法...
- 求a^b前n位和后n位
- centos下安装ruby,删除ruby
- 程序人生:32条软件开发的建议和教训,值得读一读!
- Laravel Eloquent关联模型查询设置查询条件与指定字段
- 洛谷1048 采药(01背包)
- 微博授权失败 redirect_uri_mismatch
- 时间的正则表达式验证
- 【Android开发】消息提示框与对话框-使用AlertDialog创建对话框
- 读论文:AlexNet
- vsftpd 配置-使用虚拟账户登录
- 倍加福二维码测试1-串口助手测试
- MySql适配人大金仓数据库
- 刻录linux-iso至u盘工具,ISO USB刻录工具ISO to USB burning tool V1.5 完美版
- Excel:数据转置
- mummer基因组共线性分析详解
- GLUE数据集介绍:RTE、MRPC、SST-2、QNLI、MNLI、QQP
- Linux裸机开发详解
热门文章
- mysql .pdb是什么文件_超详细讲解如何使用 pdb 在服务器上调试代码
- 作者:赵文明(1977-),男,中国科学院北京基因组研究所生命与健康大数据中心高级工程师...
- 作者:钱宇华(1976-),男,博士,山西大学计算智能与中文信息处理教育部重点实验室教授...
- 【数理统计】基础理论归纳
- 【数据结构与算法】二叉树基本算法锦集
- 光栅图形学算法基础其二 (裁剪算法)
- 【本人秃顶程序员】深入理解Java——ConcurrentHashMap源码的分析(JDK1.8)
- 计数原理,递推,求从左边能看到l个棒子,右边能看到r个棒子的方案数目
- 作业26-完成登录功能,用session记住用户名
- 如何在Linux上制作一个屏幕录像视频教程