爲什麼這段Java代碼不能在Kotlin中編譯,而在Collectors.toList<String>()
中沒有顯式類型參數?有沒有更習慣的方式來做到這一點?Java lambda類型推斷在Kotlin中沒有像預期的那樣工作
// works
List<String> folders = Files.walk(Paths.get(args[0]))
.filter(it -> it.toFile().isDirectory())
.map(it -> it.toAbsolutePath().toString())
.collect(Collectors.toList());
// does not compile - resulting type is `MutableList<in String!>..List<Any?>?` which is not compatible to `List<String>`
val folders: List<String> = Files.walk(Paths.get(args[0]))
.filter { it.toFile().isDirectory }
.map { it.toAbsolutePath().toString() }
.collect(Collectors.toList())
// compiles
val folders: List<String> = Files.walk(Paths.get(args[0]))
.filter { it.toFile().isDirectory }
.map { it.toAbsolutePath().toString() }
.collect(Collectors.toList<String>())
只是一個旁註,Kotlin有它自己的'File.walk'擴展方法。 –
你已經偶然發現了類型推斷中的一個錯誤https://youtrack.jetbrains.com/issue/KT-11259 – Ilya
@Ilya感謝您的鏈接 - 偉大的是已經有一張票。 – atamanroman