【发布时间】:2015-02-17 10:25:14
【问题描述】:
我遇到了一个有趣的问题,想知道是否以及如何在 Java 中做到这一点: 创建一个可以记忆任何函数/方法的方法。该方法具有以下参数:方法/函数及其参数。
例如,假设我有这个方法:
int addOne(int a) { return a + 1;}
我用相同的参数调用了我的记忆方法两次:例如 addOne 和 5,第一次调用实际上应该调用 addOne 方法并返回结果,并为给定的参数存储该结果。当我第二次打电话时,它应该知道这已经被调用过,只需查找以前的答案。
我的想法是有一个类似HashMap<Callable,HashMap<List<Objects>,Object>> 的东西,您可以在其中存储以前的答案并稍后查找它们。我认为这可以通过 lambda 表达式以某种方式完成,但我对它们不太熟悉。我'不太确定如何编写此方法,希望能得到一些帮助。
用这种方法可以做到吗?
【问题讨论】:
-
研究 Java 的代理机制。您可以创建拦截方法调用的对象的代理,存储返回值。如果您使用与先前调用相同的参数调用该方法,则无需调用底层方法即可获得相同的结果。 Spring 缓存为您完成了这项工作。
标签: java lambda memoization