سؤال

How can I make that conversion?

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

request.setAttributeDefinitions(attrDefs);

I've read in many different places that we should just import this:

import scala.collection.JavaConverters._

And it should work, but it doesn't compile.

I'm getting this error:

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

I'm using Scala 2.9.3.

هل كانت مفيدة؟

المحلول

You need to call asJavaCollection to do the conversion, this should work:

import scala.collection.JavaConverters._

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

request.setAttributeDefinitions(attrDefs.asJavaCollection)

As an alternative, you can use import scala.collection.JavaConversions._ to not have to call asJavaCollection. However, I find that it makes what the code is doing more readable to call the method. Here's the alternate example:

import scala.collection.JavaConversions._

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

request.setAttributeDefinitions(attrDefs)

نصائح أخرى

As of Scala 2.9, you should prefer covert package for converting Java <-> Scala collections:

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

so import wrapAsScala:

import collection.convert.wrapAsScala._
var attrDefs = Vector(new AttributeDefinition(), new AttributeDefinition())
request.setAttributeDefinitions(attrDefs)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top