java - How to differentiate between a bound callable member reference and a function of the same type in kotlin? -
when comes method signature or definition, there way differentiate
users().indexon(user::id) and
users().indexon<user, string> { it.id() } ? is, specify bound member reference required , not function instance, or vice versa. here signature of above example:
fun <t: sometype, u> indexon(function: (t) -> u): list<u> on same note, possible differentiate between constructor reference , function returns type? e.g. query(::somelookup) vs. query { somelookup(args) } (without kotlin.reflect, if possible)
one way distinguish lambda function reference within type system using reflection interface kfunction<t>, example:
fun <t> f(ref: t) t : () -> unit, t : kfunction<unit> { /* ... */ } fun g() { println("hello") } f(::g) // ok  f { println("hello") } // error: type parameter bound not satisfied though not make work other way around now.
also, found no way distinguish constructor reference type. @ runtime, however, easy through reflection: can check whether javaconstructor of kfunction<*> null.
Comments
Post a Comment