当前位置: 首页 > 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.rkmt.cn/news/11422.html

相关文章:

  • 达梦数据库DM-查询指定模式下表的大小
  • 2025年十大主流项目管理工具评测:功能覆盖与成本效益分析
  • 分布式专题——19 Zookeeper分布式一致性协议ZAB源码剖析 - 指南
  • 网络运维 --- ntp服务器
  • 向量那点事儿
  • PySpark - Get the number of rows
  • RK3588-ubuntu server - 详解
  • Go语言中的信号捕获与优雅退出:SIGINT、SIGTERM和SIGKILL详解 - 若
  • 实用指南:虚拟机搭建 DHCP 服务器 + 配置 DHCP 中继:完整实操指南
  • Kendo UI for jQuery 2025 Q3新版亮点 - AI 智能网格与全新表单体验
  • DevExpress WPF中文教程:如何使用虚拟源将WPF数据网格绑定到任何数据源?
  • 数据跨境传输解决方案助力企业安全合规高效流通
  • 题解:P9454 [ZSHOI-R1] 巡城
  • 我的第一个赚钱网站 -- 从网站源码到集成AdSense获利的全过程
  • Gradle读取仓库配置文件的优先级
  • PCS PMA,如何理解硬核IP
  • pycharm中使用调试模式运行 uvicorn.run(app)报错TypeError: _patch_asyncio.locals.run() got an unexpected keywor解决
  • 交换机命令
  • 开写第一篇
  • C#操作Excel核心要点:告别手动,拥抱自动化
  • 250925
  • 使用责任链模式简化if-else代码示例
  • SQLAlchemy -> Base.metadata.create_all(engine )详解 - 实践
  • Transformer 面试题及详细答案120道(51-60)-- 模型变体与改进 - 详解
  • 【源码解读之 Mybatis】【基础篇】-- 第3篇:SqlSession的创建与生命周期
  • 基于Qt和FFmpeg的安卓监控模拟器/手机摄像头模拟成onvif和28181设备
  • 不只是一台玩具车:开源燃料电池机器人HydroBot全揭秘 - 实践
  • 前端笔记:vue中 Map、Set之间的采用和区别
  • 性能暴涨50%:PD分离KV cache传输的实战干货
  • 【GitHub每日速递 250925】 一套代码跑遍全平台!Flutter 让你的应用开发提速 10 倍