如何从已实例化对象创建Java Supplier以生成新实例?
从已实例化Java对象创建Supplier的便捷方案
如果你需要基于已存在的实例创建Supplier(每次调用get()都返回同一个实例),可以用以下几种便捷方式:
1. 直接使用Lambda表达式(JDK原生,无依赖)
这是最直接的JDK原生写法,无需引入任何第三方库:
CustomObject customObject = new CustomObject(); Supplier<CustomObject> supplier = () -> customObject;
每次调用supplier.get()都会返回你预先实例化好的customObject实例。
2. 借助Guava库的工具方法(若项目已引入Guava)
如果你的项目已经使用了Guava库,可以用它提供的Suppliers.ofInstance()方法,语义更清晰:
CustomObject customObject = new CustomObject(); Supplier<CustomObject> supplier = Suppliers.ofInstance(customObject);
该方法内部逻辑和Lambda写法完全一致,只是封装成了工具方法,代码更简洁。
3. 自定义工具方法(无第三方依赖,复用性强)
如果不想引入Guava,也可以自己封装一个静态工具类,实现类似你设想的Supplier.of()功能:
public class SupplierUtils { // 封装返回固定实例的Supplier创建逻辑 public static <T> Supplier<T> ofInstance(T instance) { return () -> instance; } }
使用时直接调用工具方法:
CustomObject customObject = new CustomObject(); Supplier<CustomObject> supplier = SupplierUtils.ofInstance(customObject);
注意区分
要注意和你提到的创建新实例的Supplier区分开:
() -> new CustomObject()或CustomObject::new每次调用get()都会生成一个新的CustomObject实例,不符合你基于已有实例的需求。
内容的提问来源于stack exchange,提问作者mullair
相关产品推荐
相关产品推荐

