Мне нужно получить результат медленного метода slowResult()
для экземпляров класса Something
.Кэширование само по себе не помогает, так как экземпляры почти никогда не повторяются.К счастью, я знаю, что результат зависит на самом деле только от некоторых легко получаемых Attributes
из Something
, поэтому я мог бы использовать Map<Attributes, Result>
в качестве кэша в коде
Result fastResult(Something something) {
final Attributes attributes = attributesFor(something)
Result result = cache.get(attributes);
if (result!=null) return result;
result = something.slowResult();
cache.put(attributes, result);
return result;
}
, чтобыограниченный кеш Я использовал устаревшие методы maximumSize
и expireAfterAccess
.Устаревание связано с тем, что вместо него будет использоваться новый класс CacheBuilder
.Тем не менее, я не нашел хорошего способа применить его к моему делу.Ключи кеша должны быть экземплярами Attributes
, но при загрузке кеша необходим экземпляр Something
, и нет простого способа воссоздать его из Attributes
.
Есть ли хорошее решение этой проблемы?