代码之家  ›  专栏  ›  技术社区  ›  Andreas Neumann

scala12.x和java11'String.lines',如何在链式调用中强制隐式转换?

  •  5
  • Andreas Neumann  · 技术社区  · 8 年前

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

    在链式方法调用中

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

    代码将不再编译并抛出 foldLeft

    如何表示我希望应用隐式(没有parens的)isntead的java.String.lines()

    附加信息

    • linesIterator 但它被否决了。
    • 降级是一种选择,但有办法绕过它。
    • val text : StringOps 看起来真的很难看,但解决了它,但我不满意这个解决方案
    2 回复  |  直到 8 年前
        1
  •  13
  •   obourgain    8 年前

    StringOps#lines 和jdk11 java.lang.String#lines 是scala中的一个bug,请参阅问题 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>
    
        2
  •  4
  •   Clashsoft    8 年前

    您可以强制Scala使用隐式转换 StringOps lines

    (text: StringOps).lines.foldLeft("")(_ + _)
    
    推荐文章