Использование результатов JDOQL в Scala - PullRequest
2 голосов
/ 03 августа 2009

Я пытаюсь использовать JDO с Google App Engine и Scala. API для execute возвращает 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 ]

1 голос
/ 03 августа 2009

Использовать 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(_))
1 голос
/ 03 августа 2009

Проблема в том, что коллекция 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
...