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

如何获取已初始化PassiveExpiringMap实例的TTL值?

获取PassiveExpiringMap的TTL值解决方案

嘿,我刚好对Apache Commons Collections里的PassiveExpiringMap比较熟悉,这个问题我来帮你搞定~

你遇到的问题是因为expirationTime这类属性是类的私有/包级私有成员,遵循面向对象的封装原则,不能直接访问。不过官方提供了公共API来间接获取TTL值,步骤如下:

步骤1:确保持有PassiveExpiringMap的具体实例引用

如果你当初声明时用了Map接口,需要先把它转回具体的PassiveExpiringMap类型(或者直接在声明时就用具体类):

// 方式1:声明时直接用具体类(推荐)
PassiveExpiringMap<String, Boolean> expiringMap = new PassiveExpiringMap<>(1000);

// 方式2:如果已经是Map类型,强转
Map<String, Boolean> expiringMap = new PassiveExpiringMap<>(1000);
PassiveExpiringMap<String, Boolean> specificMap = (PassiveExpiringMap<String, Boolean>) expiringMap;

步骤2:获取过期策略并提取TTL值

当你用new PassiveExpiringMap<>(1000)初始化时,底层默认使用的是ConstantTimeToLiveExpirationPolicy(固定存活时间的过期策略)。我们可以通过这个策略对象拿到TTL:

// 获取过期策略
ExpirationPolicy<String, Boolean> policy = specificMap.getExpirationPolicy();

// 判断是否为固定TTL策略
if (policy instanceof ConstantTimeToLiveExpirationPolicy) {
    ConstantTimeToLiveExpirationPolicy<String, Boolean> ttlPolicy = 
        (ConstantTimeToLiveExpirationPolicy<String, Boolean>) policy;
    long ttl = ttlPolicy.getExpirationDuration();
    System.out.println("当前TTL值:" + ttl); // 这里会输出1000
}

补充说明

  • 这个方法只适用于你用默认的“固定TTL”构造器初始化的场景;如果自定义了其他过期策略(比如基于最后访问时间的策略),需要对应处理该策略的API。
  • 一定要通过公共API操作,不要尝试反射去访问私有属性——这会破坏封装,而且后续版本更新可能导致代码失效。

内容的提问来源于stack exchange,提问作者harshit-sh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:06:54