JDOQL을 사용하면 스칼라가 있습니다
-
10-07-2019 - |
문제
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 컬렉션이 스칼라 컬렉션이 아니라는 것입니다. Youy는 암시 적 변환이 필요합니다 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
제휴하지 않습니다 StackOverflow