将scala.collection.immutable.Vector转换为java.util.Collection

时间:2013-07-19 01:14:16

标签: java scala type-conversion scala-java-interop

如何进行转换?

var attrDefs = Vector(new AttributeDefinition(), new AttributeDefinition());

request.setAttributeDefinitions(attrDefs);

我读过很多不同的places我们应该导入这个:

import scala.collection.JavaConverters._

它应该可以工作,但它不能编译。

我收到了这个错误:

 found   : scala.collection.immutable.Vector[AttributeDefinition][scalac]
 required: java.util.Collection[AttributeDefinition]

我正在使用 Scala 2.9.3

2 个答案:

答案 0 :(得分:2)

您需要致电asJavaCollection进行转换,这应该有效:

import scala.collection.JavaConverters._

var attrDefs = Vector(new AttributeDefinition(), new AttributeDefinition())

request.setAttributeDefinitions(attrDefs.asJavaCollection)

作为替代方案,您可以使用import scala.collection.JavaConversions._来调用asJavaCollection。但是,我发现它使得代码在调用方法时更具可读性。这是另一个例子:

import scala.collection.JavaConversions._

var attrDefs = Vector(new AttributeDefinition(), new AttributeDefinition())

request.setAttributeDefinitions(attrDefs)

答案 1 :(得分:1)

从Scala 2.9开始,您应该更喜欢用于转换Java的隐蔽包< - > Scala集合:

val attr = new java.util.Vector[String]()
scala.collection.convert.wrapAsScala.collectionAsScalaIterable(attr) // it's implicit

所以导入wrapAsScala:

import collection.convert.wrapAsScala._
var attrDefs = Vector(new AttributeDefinition(), new AttributeDefinition())
request.setAttributeDefinitions(attrDefs)