前言
LazyConstant是JDK26之后引入的新属性,是一个延迟常量,之前的JDK25中的StableValue已经移除了,改成这个了,它本质是一个持有不可变数据的容器,能够实现对象的按需初始化,旨在替代传统复杂且易错的延迟初始化模式
LazyConstant使用
以往开发者为了实现延迟初始化,通常需要使用双重检查锁定,但是 LazyConstant 完美解决了上述痛点,其核心优势包括:
- 按需初始化 :只在首次调用
get()方法时才执行初始化逻辑,显著提升应用启动性能。 - 内置线程安全:JVM 保证初始化过程的线程安全性,开发者无需再编写任何同步代码或双重检查锁定逻辑。
- JVM 深度优化 :一旦值被初始化,JVM 会将其视为真正的
final常量,从而开启常量折叠(constant folding) 等高级优化。后续调用get()时,JIT 编译器可能直接将结果内联,性能远超传统的volatile懒加载方案。 - 简化代码:消除了繁琐的延迟初始化样板代码,提升了代码的可读性与可维护性。
LazyConstant使用
typescript
public class UserService {
public String say() {
return "success";
}
}
csharp
public class LazyConstantDemo {
static void main(String[] args) {
LazyConstant<UserService> lazyConstant = LazyConstant.of(() -> {
System.out.println();
return new UserService();
});
UserService a = lazyConstant.get();
System.out.println(a);
}
}
输出结果为

总结
LazyConstant是JDK26的一个预览属性,但是是线程安全安全的,可以使用看看,使用 LazyConstant 非常简洁,只需通过 LazyConstant.of() 工厂方法传入一个 Supplier 函数即可定义惰性常量。该值在首次访问后会被缓存,且永不改变