消除代码冗长神器 - Lombok | val/var 本地变量声明
2024-01-08 20:58:12
🤷 场景
一般来说,在 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
文章来源:https://blog.csdn.net/u012383839/article/details/135464575
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!