使用反射时如何重新选择歧义?

问题描述 投票:0回答:1

我正在尝试在 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

我在这里错过了什么?

android kotlin reflection ambiguity
1个回答
0
投票

你应该使用

val str: KFunction2<String,Locale, String> = String::toUpperCase
© www.soinside.com 2019 - 2024. All rights reserved.