如果我将以下Java代码转换为Kotlin,则使用来自最新IntelliJ IDEA 2018.3的最新Kotlin 1.3.10插件:
String eqps = "";
String[] pts = rs.getString("equipamento").split(",");
for (String c : pts) {
eqps += c.split(":")[1].trim() + ",";
}
我明白了:
BufferedReader br = Files.newBufferedReader(Paths.get("filename"));
String line;
while ((line = br.readLine()) != null)
System.out.println(line);
val br = Files.newBufferedReader(Paths.get("filename"))
var line: String
while ((line = br.readLine()) != null)
println(line)
是惯用的Java,但由于Kotlin中的赋值不是表达式,因此其自动翻译会导致语法不合法。
这是Java到Kotlin转换器中的已知错误吗?
与上述Java代码等效的Kotlin惯用语法是什么?
答案 0 :(得分:2)
我认为评论已回答了我的两个问题,所以让我将其汇总为一个答案。
是的,这是一个已知的错误,报告于youtrack.jetbrains.com/issue/KT-6294。您可以投票给它(如果您有一个Jetbrains帐户),以向开发人员展示您希望修复它。感谢Alexey Belkov引起我的注意。
直接翻译它的常见方法是:
val br = Files.newBufferedReader(Paths.get("filename"))
var line: String
while (br.readLine().also { line = it} != null)
println(line)
但是,在这种情况下,更好的方法是:
val br = Files.newBufferedReader(Paths.get("filename"))
br.forEachLine {
println(it)
}
或者只是
File("filename").forEachLine {
println(it)
}
(使用便捷方法,等效于Java的便捷方法Files.lines(Path)
)。