2013-07-19 9 views
2

如何进行转换?将scala.collection.immutable.Vector转换为java.util.Collection

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] 

我使用斯卡拉2.9.3

我得到这个错误。

回答

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) 
+0

真棒@诺亚!我对于Eclipse的Scala插件有很多问题。实际上,它仍然向我展示该方法不存在,但它的工作原理! –

+1

我不确定你是如何依赖Eclipse的,但是我发现Intellij在大多数情况下都会好得多,包括Scala :) – Noah

+0

我的团队中有很多人已经在使用Intellij,我认为Scala会迫使我迁移: O) –

1

由于斯卡拉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) 
相关问题