tieskedh
06/25/2018, 6:36 PMinline fun <reified T, reified R, reified S : Binding<R>> ObservableValue<T>.fun1(vararg dependencies: Observable, noinline op: (T?) -> R)
= fun2(*dependencies, op = op)
inline fun <reified T, reified R> ObservableValue<T>.fun2(vararg dependencies: Observable, crossinline op: (T?) -> R) = when (R::class) {
String::class -> stringBinding(*dependencies) { it: T? -> op(it) as String? }
Double::class -> doubleBinding(*dependencies) { it: T? -> op(it) as Double }
Float::class -> floatBinding(*dependencies) { it: T? -> op(it) as Float }
Long::class -> longBinding(*dependencies) { it: T? -> op(it) as Long }
Int::class -> integerBinding(*dependencies) { it: T? -> op(it) as Int }
Boolean::class -> booleanBinding(*dependencies) { it: T? -> op(it) as Boolean }
else -> objectBinding(*dependencies) { it: T? -> op(it) }
} as Binding<R>