Question

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 souhaite le placer dans une liste scala pour pouvoir le parcourir.

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 stade est que toArray n’est pas membre d’Object. Quelle est la meilleure façon de faire ce qui précède? J'ai essayé d'utiliser .asInstanceOf [java.util.Collection [Utilisateur]] , mais la tentative a échoué.

Était-ce utile?

La solution

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(_))

Autres conseils

Le problème est que la collection Java n'est pas une collection Scala. Vous avez besoin des 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top