質問

Google App EngineとScalaでJDOを使用しようとしています。実行用のAPIは 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]] を使用しようとしましたが、失敗しました。

役に立ちましたか?

解決

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

他のヒント

問題は、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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top