1

我不太确定这是否可能,所以我问你们。我想编写一个方法,知道它之前是否被访问过,以及它是否返回了与上次访问时相同的值。我不能为此使用字段/实例变量。

这是我想做的,没有实例变量 foo:

private FooObject foo = null;
public int setFoo(FooObject in)
{
    if(foo == null)
        foo = in;

    return foo.getX();
}

这可以做到吗?

4

5 回答 5

5

知道它是否曾被访问过

了解之前发生的事情需要记忆,也就是state。因此,您将需要一些东西来存储该知识;你无法避免它。

于 2012-04-30T21:15:23.430 回答
1

我同意@Oli Charlesworth,没有状态你不能这样做。但是使用字段来保存状态只是众多选项之一。例如,您可以使用 System.setProperty() 和 System.getProperty() 将状态保存为系统属性,或者将状态保存到文件中。您甚至可以将状态保存到数据库中。

于 2012-04-30T21:35:32.217 回答
0

不使用实例变量?不,这是不可能的。您需要一种方法让方法在调用之间“记住”某些内容 - 局部变量不起作用,它必须是在方法调用之外“存在”的东西。这就是实例变量的用途:保存状态,对所有实例方法都可见。

于 2012-04-30T21:15:24.067 回答
0

您可以使用缓存。从缓存中读取以查找输入。如果输入已经在缓存中,则从缓存中返回值。如果没有,则将该条目放入缓存中并返回新的计算值。

CacheManager singletonManager = CacheManager.create();
Cache memoryOnlyCache = new Cache("testCache", 5000, false, false, 5, 2);
manager.addCache(memoryOnlyCache);
Cache cache = singletonManager.getCache("testCache");

放入新条目

Element element = new Element("key1", "value1");
cache.put(element);

在 chache 中寻找:

Element element = cache.get("key1");
Object value = element.getObjectValue();

对于删除:

cache.remove("key1");

您可以将其保存到磁盘。

有关详细信息,请参阅http://ehcache.org/

于 2012-04-30T21:46:06.487 回答
0

您可以使用Preferences API。但是,这允许您跨应用程序加载存储内存,因此如果您希望每次加载时都重新启动它,您需要设置一个关闭挂钩以清除 Preferences API 中的值。

于 2012-04-30T22:39:23.513 回答