1 package com.atlassian.cache;
2
3 import javax.annotation.Nonnull;
4
5 import com.atlassian.annotations.PublicSpi;
6
7 /**
8 * Populates a cache, for example lazily upon a miss.
9 *
10 * @param <K> the type of key used by the cache
11 * @param <V> the type of value stored in the cache
12 * @since 2.0
13 */
14 @PublicSpi
15 public interface CacheLoader<K, V>
16 {
17 /**
18 * Loads the value for the given key.
19 *
20 * @param key the key for which to load the value (required)
21 * @return a non-null value; if null values are possible, e.g. when the key is a database ID that does not
22 * actually exist, declare the loader's value type to be a wrapper type such as Guava's {@code Option<Foo>} class
23 */
24 @Nonnull
25 V load(@Nonnull K key);
26 }