Shawn A
04/21/2019, 4:16 PMShawn A
04/21/2019, 4:16 PMclass Extractor<in T, out R, out O>(
private val prop: KProperty1<T, R>,
private val func: (R) -> O
) {
fun extract(receiver: T): O {
return func(prop.get(receiver))
}
}
class Marshaller<T : Any> {
private val extractors: MutableList<Extractor<*, *, *>> = arrayListOf()
fun <R : Any, O : Any> toAttr(
prop: KProperty1<T, R>,
extractor: (R) -> O
) {
extractors.add(Extractor(prop, extractor))
}
fun <R: Any> toAttr(prop: KProperty1<T, R>) {
toAttr(prop) { it }
}
fun extractAll(receiver: T): List<Any?> {
return extractors.map { it.extract(receiver) }
}
}
karelpeeters
04/21/2019, 6:07 PMextractors
isn't a MutableList<Extractor<T, *, *>>
?Shawn A
04/21/2019, 6:31 PMkarelpeeters
04/21/2019, 7:41 PMShawn A
04/21/2019, 7:55 PM