final和lamda表达式,Optional
final关键字的作用
为什么使用 final?
- 安全性:防止意外修改(如常量、不可变类)。
- 设计意图:明确声明“不可变”,提升代码可读性。
- 性能优化:JVM 可能对 final 变量进行优化(如内联)。
final
关键字的作用总结
修饰目标 | 作用 | 示例 |
---|---|---|
变量 | 值(基本类型)或引用(对象类型)不可变(重新赋值) | final int x = 10; final List<String> list = new ArrayList<>(); |
方法 | 禁止子类重写该方法 | final void method() { ... } |
类 | 禁止其他类继承该类 | final class A { ... } |
jdk8 lambda表达式
箭头函数
details.forEach(detail -> detail.setSonDetails(getDeptImportantTaskSonDetails(detail.getid())));
Lambda 表达式:简化了函数式接口(如 Consumer)的实现,forEach:替代传统 for 循环,更简洁。
details.forEach(new Consumer<Detail>() {
@Override
public void accept(Detail detail) {
detail.setSonDetails(getDeptImportantTaskSonDetails(detail.getid()));
}
});
optional
// ❌ 冗余:List 本身已能表达“空”的状态
Optional<List<PersonInfo>> optionalList = Optional.ofNullable(getPersonList());
// ✅ 更清晰的写法
List<PersonInfo> list = getPersonList(); // 直接使用空集合
if (!list.isEmpty()) { ... }
包装集合中的元素(推荐)
// ✅ 明确表示“可能没有第一个元素”
Optional<PersonInfo> firstPerson = getPersonList().stream().findFirst();
// 链式安全操作
firstPerson.ifPresent(person -> System.out.println(person.getName()));
何时该用 Optional 处理集合?
适用场景
- 查询单条数据(如 findFirst/findAny/max)。
- 需要明确区分“无结果”和“结果为空集合”时(少见,但可能存在)。
不适用场景
- 单纯返回集合(如 List/Set),直接用空集合表示“无数据”。
通过这种方式,可以避免滥用 Optional 同时保持代码的健壮性。