Scala 12.x 和 Java 11 `String.lines`,如何在链式调用中强制进行隐式转换?

Scala 12.x and Java 11 `String.lines`, how to force the implicit conversion in a chained call?

问题描述 Scala StringOps 提供了一个 lines 方法,该方法 return 是 Iterator[String]。 Java 11 添加了 lines() return 类型 java.Stream[String]

在像

这样的链式方法调用中
val text: String
text.lines.foldLeft("")(_ + _)

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

中找到了 lines 方法

我如何表达我想要应用隐式(没有括号的)而不是 java.String.lines()

附加信息

StringOps#lines 和 jdk11 java.lang.String#lines 之间的冲突是 scala 中的一个错误,请参阅问题 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>

您可以强制 Scala 使用隐式转换为 StringOps,这将使用旧的 lines 方法:

(text: StringOps).lines.foldLeft("")(_ + _)