2009-08-03 11 views
2

J'essaie d'utiliser un JDO avec Google App Engine et Scala. L'API pour l'exécution retourne Object (mais c'est vraiment une collection java) et je veux l'obtenir dans une liste de scala pour l'itérer.Utilisation des résultats JDOQL dans Scala

Mon code ressemble à ceci jusqu'à présent:

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

L'erreur de compilation à ce point est toArray est pas membre d'objet. Quelle est la meilleure façon de faire ce qui précède? J'ai essayé d'utiliser .asInstanceOf[java.util.Collection[User]], mais c'était une tentative ratée.

Répondre

1

Utilisez 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

Le problème est que la collection Java n'est pas une collection scala. Youy ont besoin les conversions implicites dans le package 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