如何解决方法引用中的过载歧义?
假设我想将java方法Log.d(String, String)
赋值给方法类型(String, String) -> Int
的变量x
,我这样做:
val x: (String, String) -> Int = android.util.Log::d
编译器说:
Error:(50, 56) Overload resolution ambiguity: public open fun d(tag: kotlin.String!, msg: kotlin.String!): kotlin.Int defined in android.util.Log public open fun d(tag: kotlin.String!, msg: kotlin.String!, tr: kotlin.Throwable!): kotlin.Int defined in android.util.Log
显然还有第二种方法Log.d(String, String, Throwable)
但是如何告诉编译器我想要哪一个呢?
这里的消歧目前是不受支持的(稍后会被支持)。
作为解决方法,您可以使用lambda表达式:
{ s, s1 -> android.util.Log.d(s, s1) }