我有一个带有实例方法 buildHierarchyUncached 的现有类,其签名可以在下面找到。
private fun buildHierarchyUncached(date: LocalDate): Node { ... }
我想向公众提供functionbuildHierarchy 是 buildHierarchyUncached 的记忆版本。我可以接近我想要的:
val buildHiearchy = Memoize<LocalDate, Node>({buildHierarchy(it)})
可以这样称呼:
hierarchyService.buildHiearchy(businessDate)
Using:
class Memoize<I, O>(val func: (I) -> O): (I) -> O{
val cache = hashMapOf<I, O>();
override fun invoke(p1: I): O {
return cache.getOrPut(p1, { func(p1) } )
}
}
我希望能够将记忆函数声明为函数而不是属性,这并不是什么大问题,尽管我认为这有助于提高可读性。像这样:
fun buildHierarchy(date: LocalDate): Node = Memoize<LocalDate, Node>({ buildHierarchyUncached(it)})
但这不会编译:“类型不匹配。必需的节点。找到记忆。”
另外,为什么这不能编译?
val buildHiearchy = Memoize<LocalDate, Node>({(date) -> buildHierarchy(date)})