You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不执行方法的情况下获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 16:31:02