【问题标题】:Convert scala.collection.immutable.Vector to java.util.Collection将 scala.collection.immutable.Vector 转换为 java.util.Collection
【发布时间】:2013-07-18 04:17:48
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    您需要致电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)
    

    【讨论】:

    • 太棒了@Noah!我的 Eclipse Scala 插件有很多问题。实际上,它仍然显示该方法不存在,但它有效!
    • 我不确定你对 Eclipse 的依恋程度,但我发现 Intellij 在大多数事情上都要好得多,包括 Scala :)
    • 我团队中的很多人已经在使用 Intellij,我认为 Scala 会迫使我迁移 :O)
    【解决方案2】:

    从 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      相关资源
      最近更新 更多