当前位置: 首页 > news >正文

java21学习笔记-未命名的模式和变量 - 指南

java21学习笔记-未命名的模式和变量 - 指南

使用未命名变量和未命名模式增强 Java 编程语言,当需要变量声明或嵌套模式但从未使用时可以使用。两者都用下划线字符 _ 表示。

443:Unnamed Patterns and Variables (Preview)        java21
456:Unnamed Variables & Patterns                            java22

在java21中预览,在java22中正式发布。

使用下划线字符 _ 声明未命名的变量 (U+005F),以代替局部变量中局部变量的名称 declaration 语句,或 catch 子句中的异常参数,或 lambda 表达式中的 lambda 参数。

使用场景

块中的局部变量声明语句

record Point(int x, int y) { }
enum Color { RED, GREEN, BLUE }
record ColoredPoint(Point p, Color c) { }
public static void main(String[] args) {
var point = new Point(12, 34);
if (point instanceof Point(int x, _)) {
System.out.println((Point) point);
System.out.println(point.x);
System.out.println(x);
}
switch (point) {
case Point(int x, _) -> System.out.println("Hello, Point!" + x);
default -> System.out.println("default");
}
}

try-with-resources 语句的资源规范

String _age = "181";
String __ = "18";
String MAX_AGE = "118";
try (var _ = new FileOutputStream(new File("C:\\Users\\Administrator\\Desktop\\todo.md")) ) {    // Unnamed variable
//        try (var _ = new FileOutputStream(new File("")) ) {    // Unnamed variable
System.out.println(_age);
System.out.println(__);
System.out.println(MAX_AGE);
} catch (FileNotFoundException _) { // Unnamed variable
System.out.println("File not found");
} catch (IOException e) {
throw new RuntimeException(e);
}

基本 for 循环的标头

for (int i = 0, _ = sideEffect(i); i < a.size(); i++) { //但是不需要sideEffect复杂方法的返回值 Unnamed variable
System.out.println(a.get(i));
}
static int sideEffect(int i) {
System.out.println("这个方法很复杂,有一大堆逻辑需要执行");
return 0;
}

增强型 for 循环的标头

Map stringStringMap = Map.of("1", "a", "2", "b", "3", "c");
Set strings = stringStringMap.keySet();
System.out.println(count(strings));
static int count(Iterable orders) {
int total = 0;
for (String _ : orders)    // Unnamed variable
total++;
return total;
}

catch 块的异常参数

try (var _ = new FileOutputStream(new File("")) ) {    // Unnamed variable
System.out.println(_age);
System.out.println(__);
System.out.println(MAX_AGE);
} catch (FileNotFoundException _) { // Unnamed variable
System.out.println("File not found");
} catch (IOException e) {
throw new RuntimeException(e);
}

lambda 表达式的形式参数

Map stringStringMap = Map.of("1", "a", "2", "b", "3", "c");
Set strings = stringStringMap.keySet();
strings.forEach(_ ->{System.out.println("不适用循环中的这个变量");}); // Unnamed variable

总体的大概意思就是增强写法,把不用的变量或者模式直接用"_"代替。

http://www.hskmm.com/?act=detail&tid=16719

相关文章:

  • 达梦数据库DM-查询指定模式下表的大小
  • 【笔记】Prfer 序列
  • win11 无线投屏(Miracast:)引发的思考附带解决方案 - Popeye
  • 2025年十大主流项目管理工具评测:功能覆盖与成本效益分析
  • 关于MCO使用配置
  • 向量那点事儿
  • c++输入输出详解
  • docker/docker compose/k8s
  • 中国开发者迎来新选择:Gitee成为研发协作平台转型期的中流砥柱
  • RK3588-ubuntu server - 详解
  • 一文教你上手 Geometric Glovius 6.0:安装、授权与首个项目演示
  • 32单片机+free rtos移植CJSON库函数主要流程
  • Gitee如何重塑中国开发者生态:本土化创新与数字化转型的双重奏
  • 输入输出接口
  • Go语言中的信号捕获与优雅退出:SIGINT、SIGTERM和SIGKILL详解 - 若
  • (二)3.1.9 生产“稳”担当:Apache DolphinScheduler Worker 服务源码全方位解析
  • 完整教程:生产环境实战:Spring Cloud Sleuth与Zipkin分布式链路追踪实践
  • 训练“系统级思维”,听时序数据库 IoTDB Committer 说说从设计到应用的成长
  • 关于gradle项目启动
  • Day08
  • 常见闪存区别
  • 进程、线程、协程、虚拟线程,傻傻分不清楚
  • 事倍功半是蠢蛋55 ctrl+shift+f 每次搜索都按倒繁体
  • Ini文件的读写
  • 数据跨境传输解决方案助力企业安全合规高效流通
  • 题解:P9454 [ZSHOI-R1] 巡城
  • QuestaSim奔溃后再次打开无法仿真
  • 软考架构备考-软件可靠性、知识产权和标准化
  • 医院内外网文件传输:平衡安全与效率的关键链路!
  • 我的第一个赚钱网站 -- 从网站源码到集成AdSense获利的全过程