Как я могу сделать это преобразование?
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.
Вы должны вызвать 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)
Начиная с Scala 2.9, вы должны предпочесть скрытый пакет для конвертирования коллекций Java <-> Scala:
val attr = new java.util.Vector[String]()
scala.collection.convert.wrapAsScala.collectionAsScalaIterable(attr) // it implicit
поэтому import wrapAsScala:
import collection.convert.wrapAsScala._
var attrDefs = Vector(new AttributeDefinition(), new AttributeDefinition())
request.setAttributeDefinitions(attrDefs)