使用普通的简单类型安全Java来进行记忆也很容易。
您可以使用以下可重复使用的类从头开始。
我将它们用作缓存,其寿命是Web应用程序上的请求。
当然,
MapMaker如果您需要驱逐策略或更多功能(例如同步),请使用Guava 。
如果您需要记住一个带有许多参数的方法,只需将两种方法都将参数放在一个列表中,然后将该列表作为单个参数传递即可。
abstract public class Memoize0<V> { //the memory private V value; public V get() { if (value == null) { value = calc(); } return value; } public abstract V calc();}abstract public class Memoize1<P, V> { //The memory, it maps one calculation parameter to one calculation result private Map<P, V> values = new HashMap<P, V>(); public V get(P p) { if (!values.containsKey(p)) { values.put(p, calc(p)); } return values.get(p); } public abstract V calc(P p); }这是这样使用的
Memoize0<String> configProvider = new Memoize0<String>() { @Override public String calc() { return fetchConfigFromVerySlowDatabase(); } }; final String config = configProvider.get(); Memoize1<Long, String> usernameProvider = new Memoize1<Long, String>() { @Override public String calc(Long id) { return fetchUsernameFromVerySlowDatabase(id); } }; final String username = usernameProvider.get(123L);


