如何让我的Java对象停止将其创建日期重置为当前日期?

时间:2010-10-07 16:26:55

标签: java date

这是非常基本的,但我无法弄清楚为什么它会一直重置创建日期。我在对象上使用了一个简单的过期缓存。如果它已过期,那么我将创建一个新对象。如果不是,那么只需使用存在的那个。但是,每次我去检查对象的创建日期时,它都是当前日期。

public class MyObjectImpl implements MyObjectInterface {

    private static final long serialVersionUID = -3542728718515350246L; // auto generated from Eclipse...

    public MyObjectImpl() {
        this.creationDate = new Date().getTime();
    }

    public boolean hasExpired(BigInteger millesecondsToExpiration) {
        if (millesecondsToExpiration == null) {
            millesecondsToExpiration = new BigInteger("2592000000"); // 30 Days
        }
        if (getCreationDate() + millesecondsToExpiration.longValue() < new Date().getTime()) {
            return true;
        } else {
            return false;
        }
    }

    private Long creationDate;

    public Long getCreationDate() {
        return this.creationDate;
    }
}

以下是我的称呼方式:

MyObjectInterface myObject = (MyObjectInterface)session.getAttribute("MY_OBJECT");

if (myObject == null || (myObject != null && myObject.hasExpired(null))) {
    session.setAttribute("MY_OBJECT", new myObjectImpl());
}

2 个答案:

答案 0 :(得分:3)

hasExpired为年轻对象返回true,这是错误的方法:

if (getCreationDate() + millesecondsToExpiration.longValue() < new Date().getTime()) {
        return true;
    } else {
        return false;
    }

所以每次都要重新创建对象。

答案 1 :(得分:0)

我认为最简单的答案是你的构造函数被调用了,你不认为它是。您是否尝试过登录构造函数?