【问题标题】:Kotlin: "Type inference failed"Kotlin:“类型推断失败”
【发布时间】:2020-12-30 13:49:03
【问题描述】:

有人知道我在这里做错了什么吗?

// ...
val alphabet = ('a'..'z').toList()
val str = "testing"
val arr = str.split("")

for (char in arr) {
    var i = alphabet.indexOf(char) // Throws Error!
    //    ...
}

indexOf 方法导致 "Error:(10, 26) Kotlin: Type inference failed。类型参数 T 的值应在输入类型(参数类型、接收者类型或预期类型)中提及。尝试显式指定它 。”

我尝试过“var i: Int = alphabet.indexOf(char)”和“alphabet.indexOf(char) as Int”。同样的结果...

这里有什么问题?

【问题讨论】:

  • 您可以只调用 toList() 到字符串,甚至可以迭代原始字符串,而不是使用空字符串拆分,因为 String 本身实现了 CharSequence,因此应该可以使用 Char 数据类型进行迭代。 for (char in str) {}
  • 太棒了。非常感谢。

标签: kotlin


【解决方案1】:

我相信您的问题是您认为变量char 包含Char 值。如果是这种情况,那么 indexOf 接受 Char 值然后在调用该方法的字符列表 (List<Char>) 中查找该字符的位置是有意义的。

但是str.split() 返回的是List<String>,而不是List<Char>,所以charString。因此,您要求indexOf 方法告诉您String 在字符列表(List<Char>)中的位置。那没有意义。这就是问题的根源。我不确定这到底是如何转化为您从 Kotlin 编译器得到的错误的。

为了清楚起见,这一行产生了同样的错误:

var i = alphabet.indexOf("c") // Throws Error!

但是编译器很喜欢这一行:

var i = alphabet.indexOf('c') // No Error!!!

【讨论】:

  • 你完全正确。我不得不替换'str.split()'。发现String有一个方法'toCharArray()'。现在,一切都按预期工作。非常感谢。
猜你喜欢
  • 2018-08-21
  • 2018-05-15
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多