报告使用 plus/minus 以运算符形式(a + b、a - b)或常规调用形式(a.plus(b),a.minus(b))将 java.nio.file.Path 添加到/从 Kotlin 集合或序列中移除的调用。
由于 java.nio.file.Path 实现了 Iterable<Path>,此类调用解析为 plus 或 minus 函数的意外重载,这两个函数接受元素的集合(这种情况下为 Path 的单个元素)。 但是,代码的意图可能是添加或移除 Path 本身,而非单个元素。
示例:
// 运算符形式
val paths = listOf(path) + somePath
val paths2 = setOf(path) - somePath
// 常规调用形式
val paths = listOf(path).plus(somePath)
val paths2 = setOf(path).minus(somePath)
快速修复:
plusElement/minusElement(将语义更改为最初的意图):
val paths = listOf(path).plusElement(somePath)
val paths2 = setOf(path).minusElement(somePath)
Path 实参转换为集合,以澄清意图而不改变语义:
plus:使用 toList() 包装实参以保持顺序。minus:使用 toSet() 包装实参以提高移除效率。
val paths = listOf(path).plus(somePath.toList())
val paths2 = setOf(path).minus(somePath.toSet())