Вернуть "постоянное" значение из метода Java

Я не совсем уверен, возможно ли это, поэтому я спрашиваю вас, ребята. Я хочу написать метод, который знает, был ли он посещен ранее и возвращал ли он то же значение, что и в прошлый раз, когда его посетили. Я не могу использовать поля / экземпляры переменных для этого.

Это то, что я хочу сделать, без переменной экземпляра foo:

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

    return foo.getX();
}

Можно ли это сделать?

5 ответов

Решение

который знает, посещался ли он раньше

Знание того, что произошло раньше, требует памяти, иначе государства. Поэтому вам нужно что-то, чтобы хранить эти знания; ты не можешь избежать этого.

Я согласен с @Oli Charlesworth, вы не можете сделать это без государства. Но использование поля для сохранения состояния - это только один из многих вариантов. Например, вы можете сохранить состояние как системное свойство, используя System.setProperty() и System.getProperty(), или сохранить состояние в файл. Вы даже можете сохранить состояние в базе данных.

Без использования переменной экземпляра? нет, это не может быть сделано Вам нужен способ, чтобы метод "запомнил" что-то между вызовами - локальная переменная не будет работать, она должна быть чем-то, что "живет" вне вызова метода. И вот для чего переменная экземпляра: сохранение состояния, видимое из всех методов экземпляра.

Вы можете использовать API настроек. Это позволяет вам хранить память при загрузке приложения, поэтому, если вы хотите, чтобы она перезапускалась при каждой загрузке, вам нужно установить хук отключения для очистки значения из API настроек.

Вы можете использовать кеш. Читайте из кеша для поиска входных данных. Если вход уже находится в кеше, вернуть значение из кеша. Если нет, поместите запись в кеш и верните новое вычисленное значение.

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);

Ищу в чачэ:

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

Для удаления:

cache.remove("key1");

Вы можете сохранить это на диск.

Для получения дополнительной информации см. В http://ehcache.org/

Другие вопросы по тегам