消除代码冗长神器 - Lombok | val/var 本地变量声明

本文介绍了Java中Lombok的val和var注解,用于简化变量声明,以及JDK10引入的本地变量类型推断功能。通过实例对比展示了Lombok的val(final可变)和var(可变)在声明变量时的差异以及适用场景。
摘要由CSDN通过智能技术生成

🤷 场景

一般来说,在 Java 中声明变量时,需要指定类型。比如下方的 List:

List<String> example = new ArrayList<String>();

😎 Lombok 解决方案

提供了两个声明本地变量的注解,只能用于本地变量或者 for 循环中。

  • val:final 本地变量,实际类型从初始化表达式中推断而来,并加 final 修饰。
  • var: 可变本地变量,实际类型从初始化表达式中推断而来,不加 final 修饰。
// Lombok 代码
val example = new ArrayList<String>();
// 反编译后的代码
final ArrayList<String> example = new ArrayList<String>();

// Lombok 代码
var example = new ArrayList<String>();
// 反编译后的代码
ArrayList<String> example = new ArrayList<String>();

😎 JDK 解决方案

JDK 10 新特性 - 本地变量类型推断。😎 嘿嘿,好东西,JDK 也会吸收的。

  • 背景:Scala 和 C# 都可以使用 var 来声明本地变量,编译器会根据初始化的结果来设置变量的类型。Java 10 基于上述思路,也提供了本地变量类型推断特性。
  • 用法:✔️ 仅能用于本地变量类型推断,且必须包含初始化表达式
  • 哪些地方不能用?
    • ❌ 没有初始化表达式或者为 null 或者 lambda 表达式:没法推断的
    • ❌ 方法签名中无法使用:public long process(var list) { }
  • 示例代码:
// Java 10 之前的代码
Path path = Paths.get("src/web.log");
try (Stream<String> lines = Files.lines(path)){
    long warningCount
            = lines
                .filter(line -> line.contains("WARNING"))
                .count();
    System.out.println("Found " + warningCount + " warnings in the
log file");
} catch (IOException e) {
    e.printStackTrace();
}

// Java 10 代码
var path = Paths.get("src/web.log");
try (var lines = Files.lines(path)){
    var warningCount
            = lines
                .filter(line -> line.contains("WARNING"))
                .count();
    System.out.println("Found " + warningCount + " warnings in the
log file");
} catch (IOException e) {
    e.printStackTrace();
}

参考

1.https://projectlombok.org/features/val
2.https://projectlombok.org/features/var
3.https://developer.oracle.com/learn/technical-articles/jdk-10-local-variable-type-inference

更多文章

1.消除代码冗长神器 - Lombok | 入门-CSDN博客
2.消除代码冗长神器 - Lombok | 安装-CSDN博客
3.消除代码冗长神器 - Lombok | val/var 本地变量声明-CSDN博客
4.消除代码冗长神器 - Lombok | @Setter/@Getter 生成 setter/getter 方法-CSDN博客
5.消除代码冗长神器 - Lombok | @EqualsAndHashCode/@ToString注解详解-CSDN博客
6.消除代码冗长神器 - Lombok | @NoArgsConstructor/@RequiredArgsConstructor/@AllArgsConstructor 构造方法-CSDN博客
7.消除代码冗长神器 - Lombok | @Data 通用 POJO 注解-CSDN博客
8.消除代码冗长神器 - Lombok | @With 不可变的 setter 方法-CSDN博客
9.消除代码冗长神器 - Lombok | @Value 不可变 entity-CSDN博客
10.消除代码冗长神器 - Lombok | @Cleanup 自动清理资源-CSDN博客
11.消除代码冗长神器 - Lombok | @Log/@Slf4j 创建日志对象-CSDN博客
12.消除代码冗长神器 - Lombok | @Builder注解 - Builder 设计模式快速实现
13.消除代码冗长神器 - Lombok | @NonNull 判空逻辑
14.消除代码冗长神器 - Lombok | @SneakyThrows 检查型异常转抛
15.消除代码冗长神器 - Lombok | @Synchronized 锁
16.消除代码冗长神器 - Lombok | 试验性注解
17.消除代码冗长神器 - Lombok | 进阶用法 - 全局配置 & 去除Lombok
18.消除代码冗长神器 - Lombok | 高阶用法 -> 手写 @Getter 注解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甘蓝聊Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值