``` inline fun <reified T, reified R, reified S...
# tornadofx
t
Copy code
inline fun <reified T, reified R, reified S : Binding<R>> ObservableValue<T>.fun1(vararg dependencies: Observable, noinline op: (T?) -> R) 
        = fun2(*dependencies, op = op)
Copy code
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>