如何在不执行方法的情况下获取Java方法的返回值?
解决方法重复执行、复用返回值的思路
- 用成员变量缓存结果:在类中新增私有变量存储方法返回值,修改目标方法逻辑,优先读取缓存值,无缓存时再执行计算并写入缓存。示例代码:
private Integer chairPriceResult; public Integer chairPrice() { if (chairPriceResult != null) { return chairPriceResult; } // 原有计算逻辑 chairPriceResult = 计算得出的椅子价格; return chairPriceResult; }
后续调用chairPrice()会直接返回缓存值,不再重复执行计算流程。
- 静态懒加载实现全局单例结果:如果方法结果全局唯一且无需动态更新,可借助静态内部类实现线程安全的懒加载,确保计算逻辑仅执行一次:
private static class ChairPriceHolder { private static final Integer PRICE = calculateChairPrice(); // 这里放入原chairPrice方法的计算逻辑 } public static Integer chairPrice() { return ChairPriceHolder.PRICE; }
- 框架缓存注解简化实现:若项目基于Spring开发,直接给
chairPrice方法添加@Cacheable注解,指定缓存标识,框架会自动处理缓存逻辑:
@Cacheable(key = "'chair_price'") public Integer chairPrice() { // 原有计算逻辑 }
需提前配置缓存管理器(如Caffeine、Redis)以启用缓存功能。
- ThreadLocal存储线程内专属结果:如果仅需在同一线程内复用结果、不同线程需重新计算,用ThreadLocal存储线程隔离的缓存值:
private ThreadLocal<Integer> chairPriceThreadLocal = new ThreadLocal<>(); public Integer chairPrice() { Integer price = chairPriceThreadLocal.get(); if (price != null) { return price; } price = 计算得出的椅子价格; chairPriceThreadLocal.set(price); return price; }
注意在线程任务结束后调用chairPriceThreadLocal.remove(),避免内存泄漏。
内容的提问来源于stack exchange,提问作者Evelyn
相关产品推荐
相关产品推荐

