L'uso dei risultati JDOQL in Scala
-
10-07-2019 - |
Domanda
Sto cercando di utilizzare un JDO con Google App Engine e Scala. L'API per l'esecuzione restituisce Object
(ma in realtà è una raccolta Java) e voglio inserirlo in una scala list per iterare su di esso.
Il mio codice è così simile finora:
val pm = PMF.factory.getPersistenceManager
val query = "select from User "
val gamelist:List[User] = List(pm.newQuery(query).execute.toArray:_ *)
L'errore di compilazione a questo punto è toArray non è un membro di Object. Qual è il modo migliore per fare quanto sopra? Ho provato a usare .asInstanceOf [java.util.Collection [User]]
, ma è stato un tentativo fallito.
Soluzione
Usa 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(_))
Altri suggerimenti
Il problema è che la raccolta Java non è una raccolta scala. Hai bisogno delle conversioni implicite nel pacchetto 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow