在Scala中使用JDOQL结果

时间:2009-08-03 06:26:58

标签: scala jdo scala-collections

我正在尝试将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不是Object的成员。做上述事情的最佳方法是什么?我尝试使用.asInstanceOf[java.util.Collection[User]],但尝试失败。

2 个答案:

答案 0 :(得分:1)

问题是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

答案 1 :(得分: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(_))