Java 如何区分绑定的可调用成员引用和kotlin中相同类型的函数?

Java 如何区分绑定的可调用成员引用和kotlin中相同类型的函数?,java,android,jvm,kotlin,Java,Android,Jvm,Kotlin,当涉及到方法签名或定义时,有什么方法可以区分吗 users().indexOn(User::id) 及 ??也就是说,指定绑定成员引用是必需的,而不是函数实例,反之亦然。以下是上述示例的签名: fun <T: SomeType, U> indexOn(function: (T) -> U): List<U> 同样,有可能区分构造函数引用和只返回类型的函数吗?例如,query::SomeLookup vs.query{SomeLookupargs}不带kotlin

当涉及到方法签名或定义时,有什么方法可以区分吗

users().indexOn(User::id)

??也就是说,指定绑定成员引用是必需的,而不是函数实例,反之亦然。以下是上述示例的签名:

fun <T: SomeType, U> indexOn(function: (T) -> U): List<U>

同样,有可能区分构造函数引用和只返回类型的函数吗?例如,query::SomeLookup vs.query{SomeLookupargs}不带kotlin.reflect,如果可能的话

区分lambda与类型系统内函数引用的一种方法是使用反射接口KFunction,例如:

fun <T> f(ref: T) where T : () -> Unit, T : KFunction<Unit> { /* ... */ }
虽然我现在不能让它以另一种方式工作


此外,我还没有找到按类型区分构造函数引用的方法。然而,在运行时,通过反射很容易做到这一点:您可以检查KFunction的javaConstructor是否为null。

但是为什么?这有什么意义?@Kevinrob好奇。函数反射来了,毕竟直到现在我才知道where关键字。仔细检查参考页,发现底部有一个小段落,非常有用,谢谢!我可能遗漏了一些东西,但您的示例根本不需要泛型,对吗?e、 g.fun-fref:KFunction:unit此外,如果您希望能够接受KFunction之外的KProperty来返回可调用的值,那么可以使用KCallable:fun-fref:KCallable:R
fun <T> f(ref: T) where T : () -> Unit, T : KFunction<Unit> { /* ... */ }
fun g() { println("hello") }
f(::g) // OK

f { println("hello") } // Error: type parameter bound is not satisfied