2

我怎样才能进行这种转换?

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

request.setAttributeDefinitions(attrDefs);

我在许多不同的地方读过我们应该导入这个:

import scala.collection.JavaConverters._

它应该可以工作,但无法编译。

我收到此错误:

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

我正在使用Scala 2.9.3

4

2 回答 2

2

您需要致电asJavaCollection进行转换,这应该可以:

import scala.collection.JavaConverters._

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

request.setAttributeDefinitions(attrDefs.asJavaCollection)

作为替代方案,您可以使用import scala.collection.JavaConversions._to 不必调用asJavaCollection. 但是,我发现调用该方法会使代码所做的工作更具可读性。这是另一个示例:

import scala.collection.JavaConversions._

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

request.setAttributeDefinitions(attrDefs)
于 2013-07-19T01:17:43.727 回答
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)
于 2013-07-19T07:28:12.173 回答