首页 > 解决方案 > Scala 12.x 和 Java 11 `String.lines`,如何在链式调用中强制进行隐式转换?

问题描述

问题描述 Scala StringOps 提供了一个lines返回Iterator[String]. Java 11 添加lines()了返回类型java.Stream[String]

在像这样的链式方法调用中

val text: String
text.lines.foldLeft("")(_ + _)

代码将不再编译并抛出foldLeft未在 java.Stream[String] 上定义的异常。据我了解,不再应用隐式解析,因为现在已经在 java.String 中找到了 lines 方法。

我如何表达我希望应用隐式(没有括号的那个)而不是 java.String.lines()

附加信息

标签: javastringscalajava-11

解决方案


StringOps#lines和 jdk11之间的冲突java.lang.String#lines是 scala 中的一个错误,请参阅 issue 11125

此错误的修复是取消弃用linesIterator,这是在 2.12.7 中完成的。

Welcome to Scala 2.12.7 (OpenJDK 64-Bit Server VM, Java 11).

scala> "a".lines
res0: java.util.stream.Stream[String] = java.util.stream.ReferencePipeline$Head@2df259d0

scala> "a".linesIterator
res1: Iterator[String] = <iterator>

推荐阅读