Usando resultados JDOQL en Scala
-
10-07-2019 - |
Pregunta
Estoy tratando de usar un JDO con Google App Engine y Scala. La API para la ejecución devuelve Object
(pero en realidad es una colección java) y quiero incluirlo en una lista de escala para iterar sobre él.
Mi código se ve así hasta ahora:
val pm = PMF.factory.getPersistenceManager
val query = "select from User "
val gamelist:List[User] = List(pm.newQuery(query).execute.toArray:_ *)
El error de compilación en este momento es que ToArray no es miembro de Object. ¿Cuál es la mejor manera de hacer lo anterior? Traté de usar .asInstanceOf [java.util.Collection [User]]
, pero fue un intento fallido.
Solución
Use 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(_))
Otros consejos
El problema es que la colección Java no es una colección scala. Necesita las conversiones implícitas en el paquete 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow