На самом деле это самая важная часть строителя. Функция, переданная методу build(CacheLoader)
, берет ключ и вычисляет значение для этого ключа. Эта функция вызывается, если в данный момент в кеше нет значения этого ключа. Вычисленное значение будет добавлено в кеш позже. Существует также метод build()
без аргументов, который можно использовать, если вы хотите вручную проверить наличие элементов в кэше и добавить их вручную.
Однако ваш пример не имеет особого смысла, так как метод fetchFizzbuzzes()
не имеет аргументов. То есть - без побочных эффектов - он, вероятно, вернет одинаковое значение для всех клавиш k
.
Возьмите примеры ниже:
LoadingCache<String,Fizzbuzz> fizzbuzzes = Caffeine.newBuilder()
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.DAYS)
.build(key -> fetchFizzbuzzes(key));
fizzbuzzes.get("myKey"); // will automatically invoke fetchFizzbuzzes with 'myKey' as argument
fizzbuzzes.get("myKey"); // fetchFizzbuzzes won't be called as return value from previous call is added to the cache automatically
Cache<String, Fizzbuzz> fizzbuzzesManual = Caffeine.newBuilder()
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.DAYS)
.build();
fizzbuzzesManual.getIfPresent("myKey"); // will return null as no element for 'myKey' was added to the cache before
См. Кофеин вики для получения дополнительной информации.