我有如下功能。
fun process(string: String?): Int {
if (string != null) {
return string.filter { it.equals("a") }.length
}
return 0
}
Run Code Online (Sandbox Code Playgroud)
它显示了it.equals("a")
可以改进的消息
Call replaceable with binary operator
所以我只是用来相应Alt-Enter
地更改它并得到
fun process(string: String?): Int {
if (string != null) {
return string.filter { it == "a" }.length
}
return 0
}
Run Code Online (Sandbox Code Playgroud)
不幸的是现在它错误说明
Operator '==' cannot be applied to Char and String
。
我认为这是建议的优化中的错误?
只是为了确保我们在同一页上,it
是Char
因为filter
您使用的方法在字符串上以字符序列的形式进行操作。
您得到的错误是因为==
运算符比其方法对应项更具限制性equals()
,并且需要类型匹配。由于"a"
是字符串,因此无法使用运算符将其与字符进行比较it
。
请注意,即使带有equals()
编译的版本也无法正常工作,因为字符串永远不会等于任何字符。这就是Kotlin团队使操作员遇到编译错误的原因:更高的类型安全性。
据我了解,它们遵循Java约定的方法,equals
并通过允许Any?
作为参数来保留其契约。这可能是由于与Java互操作性的限制。
即使将运算符编译为等效的方法调用,与显式方法调用相比,编译器在运算符形式中还有其他检查。
归档时间: |
|
查看次数: |
61 次 |
最近记录: |