我不太确定这是否可能,所以这就是我问你们的原因。我想写一个方法,知道它之前是否已被访问过,如果它返回了它上次访问时的相同值。我不能为此使用字段/实例变量。
这是我想要做的,没有实例变量foo:
private FooObject foo = null;
public int setFoo(FooObject in)
{
if(foo == null)
foo = in;
return foo.getX();
}
可以这样做吗?
答案 0 :(得分:5)
知道是否在
之前访问过它
了解之前发生的事情需要记忆,即state。因此,你需要一些东西来存储这些知识;你无法避免它。
答案 1 :(得分:1)
我同意@Oli Charlesworth,如果没有州,你就不能这样做。但是使用字段来保存状态只是众多选项中的一种。例如,您可以使用System.setProperty()和System.getProperty()将状态保存为系统属性,或将状态保存到文件中。您甚至可以将状态保存到数据库中。
答案 2 :(得分:0)
不使用实例变量?不,它无法完成。你需要一种方法让方法“记住”调用之间的某些东西 - 局部变量不起作用,它必须是“生活”在方法调用之外的东西。这就是实例变量的用途:保存状态,从所有实例方法中可见。
答案 3 :(得分: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/
答案 4 :(得分:0)
您可以使用Preferences API。这允许您跨应用程序加载存储内存,因此如果您希望每次加载时重新启动内存,则需要set a shutdown hook清除Preferences API中的值。