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()
附加信息
- 我找到了
linesIterator
但它已被弃用。
- 降级是一种选择,但是否有解决办法。
val text : StringOps
看起来真的很丑但是解决了但是我对这个解决方案不满意
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("")(_ + _)
问题描述
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.
我如何表达我想要应用隐式(没有括号的)而不是 java.String.lines()
附加信息
- 我找到了
linesIterator
但它已被弃用。 - 降级是一种选择,但是否有解决办法。
val text : StringOps
看起来真的很丑但是解决了但是我对这个解决方案不满意
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("")(_ + _)