【问题标题】:Using JDOQL results in Scala在 Scala 中使用 JDOQL 结果
【发布时间】:2009-08-03 06:26:58
【问题描述】:

我正在尝试将 JDO 与 Google App Engine 和 Scala 结合使用。执行的 api 返回Object(但它实际上是一个 java 集合),我想将它放入一个 scala 列表中进行迭代。

到目前为止,我的代码如下所示:

val pm = PMF.factory.getPersistenceManager
val query = "select from User " 
val gamelist:List[User] = List(pm.newQuery(query).execute.toArray:_ *)

此时的编译错误是toArray is not a member of Object。执行上述操作的最佳方法是什么?我尝试使用.asInstanceOf[java.util.Collection[User]],但尝试失败。

【问题讨论】:

    标签: scala jdo scala-collections


    【解决方案1】:

    使用 scala.collection.jcl.Conversions:

    import scala.collection.jcl.Conversions._
    ...
    // this gets you a List[User]
    val gameList = pm.newQuery(query).execute.asInstanceOf[java.util.List[User]].toList
    ...
    // or you can just iterate through the return value without converting it to List
    pm.newQuery(query).execute.asInstanceOf[java.util.List[User]] foreach (println(_))
    

    【讨论】:

      【解决方案2】:

      问题在于 Java 集合不是 Scala 集合。你需要 jcl 包中的隐式转换:

      import collections.jcl.Conversions._
      import java.util.{Collection => JCollection}
      
      val pm = PMF.factory.getPersistenceManager
      val query = "select from User " 
      
      val users = pm.newQuery(query).execute.asInstanceOf[JCollection[User]]
      val gamelist:List[User] = List(users.toArray: _*) //implicit conversion here
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-20
        • 2017-03-20
        • 2011-07-16
        • 2011-04-08
        • 1970-01-01
        相关资源
        最近更新 更多