私はインスタンスメソッドbuildHierarchyUncachedを持つ既存のクラスを持っています。このメソッドのシグネチャは下にあります。コトリンでのメモ機能
private fun buildHierarchyUncached(date: LocalDate): Node { ... }
私はbuildHierarchyUncachedのメモ化バージョンである公共機能 buildHiearchyを提供したいと思います。私は近い私が欲しいものを得ることができます使用
hierarchyService.buildHiearchy(businessDate)
::のように呼び出すことができます
val buildHiearchy = Memoize<LocalDate, Node>({buildHierarchy(it)})
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)})
それはコンパイルされません: "型が一致しません必要なノードが見つかりmemoizeを。。。"
また、なぜこれはコンパイルされませんか?問題の性質によって
val buildHiearchy = Memoize<LocalDate, Node>({(date) -> buildHierarchy(date)})
コンパイラエラーのあるものについては、他の人がこのSOの質問を検索/見つけることができるように、コンパイラからのエラーメッセージを含めるといいです。 –
私が得たコンパイルエラーを追加しました。 –