roberto
12/12/2018, 2:54 AMgildor
12/12/2018, 3:00 AMItem1.newInstance()
to lambda and then:
menuIdToItems[menu1]()
or menuIdToItems[menu1].invoke()
gildor
12/12/2018, 3:01 AMMap<Int, () -> MyObject>
roberto
12/12/2018, 3:02 AMgildor
12/12/2018, 3:04 AMgildor
12/12/2018, 3:05 AMgildor
12/12/2018, 3:06 AMgildor
12/12/2018, 3:07 AMfun <T> memoized(instance: T): () -> T = { instance }
val menuIdToItems: Map<Int, () -> MyObject> by lazy {
mapOf(
menu1 to { Item1.newInstance() },
menu2 to memoized(Item2.newInstance()),
menu3 to memoized(item3.newInstance()),
)
}
roberto
12/12/2018, 3:10 AMgildor
12/12/2018, 3:10 AMclass Cached<T>(builder: () -> T) : () -> T {
private val instance by lazy { builder() }
override fun invoke(): T = instance
}
val menuIdToItems: Map<Int, () -> MyObject> by lazy {
mapOf(
menu1 to { Item1.newInstance() },
menu2 to Cached { Item2.newInstance() },
menu3 to Cached { item3.newInstance() },
)
}
gildor
12/12/2018, 3:11 AM