我正在尝试在 Kotlin 中执行以下行:
var str: KFunction<String> = String::toUpperCase
但是编译器说:
Overload resolution ambiguity。所有这些功能都匹配。 public inline fun String.toUpperCase(): 在 kotlin.text 中定义的字符串 public inline fun String.toUpperCase(locale: Locale): 在 kotlin.text 中定义的字符串
我认为编写 KFunction 应该克服歧义,因为在 KFunction 中的 String 之前不写任何东西意味着 KFunciton 不应该获取参数并且只返回一个字符串(与 kotlin 中定义的函数兼容.text 包,但编译器似乎需要更多信息。 我也在尝试以下作业:
var str: KFunction<java.util.Locale,String> = "some Word"::toUpperCase
并得到额外的错误说:
接口 KFunction 需要一个类型参数
如果我将使用未重载的方法(如 *toString),那么一切正常。例如:
var str: KFunction<String> = String::toString
我在这里错过了什么?
你应该使用
val str: KFunction2<String,Locale, String> = String::toUpperCase