微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不会将java.util.List隐式转换为Scala List

我对 scala.collection. JavaConversions有非常基本的问题.我会期望以下代码将工作,但从java.util.List [String]到Scala List [String]的隐式转换不会发生.为什么?
import collection.JavaConversions._
import java.util
class Test {
  def getStrings() : List[String] = {
    val results : java.util.List[String] = new java.util.ArrayList[String]()
    results
  }
}

我收到compi的消息

type mismatch;
 found   : java.util.List[String]
 required: scala.collection.immutable.List[String]
    results
    ^

解决方法

转换为:
def getStrings() : Seq[String] = {
    val results : java.util.List[String] = new java.util.ArrayList[String]()
    results
  }

这是因为,转换的隐式函数定义为:

implicit def asScalaBuffer[A](l: java.util.List[A]): mutable.Buffer[A]

它返回一个mutable.Buffer而不是scala.collection.immutable.List.因此错误.所以替代方法是使用Seq而不是List或将其转换为immutable.List,如下所示:

def getStrings() : List[String] = {
    val results = new java.util.ArrayList[String]()     
    results.toList
}

原文地址:https://www.jb51.cc/java/125575.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐