Scala中的Cast类异常:java.lang.Object到Scala案例类

时间:2013-01-26 21:19:27

标签: scala playframework-2.0 securesocial

这让我发疯了 - 我正在使用scala,社交安全等进行游戏,并且在我尝试创建案例类时,我一直收到此错误。

编辑:与此类似的问题:Scala and Play2: ClassCastException: java.lang.Object cannot be cast to play.api.libs.json.JsValue

编辑:将方法createIdentityFromUser移动到静态伴侣类似乎解决了这个问题。不知道为什么。

[ClassCastException: java.lang.Object cannot be cast to securesocial.core.SocialUser] 
In /Users/tripled153/Development/src/Foundation/playApp/app/service/SecureSocialUserService.scala     at line 58.
54//    }
55
56    println("here2")
57    //val ret = user.map(_.createIdentityFromUser)
58    user.foreach(x => x.createIdentityFromUser)
59    user match{
60      case Some(x) => Some(x.createIdentityFromUser)
61      case None => None

Line42错误输出。 地图,foreach,并匹配所有炸弹与该classcastexception,我不明白为什么。

为了便于阅读,这里的代码被清理了一下(注意SocialUser扩展了Identity trait):

  def find(id: UserId): Option[Identity] = {
   if ( Logger.isDebugEnabled ) {
     Logger.debug("find users = %s".format(users))
   }

   //Option[GraphedUser]
   val user = GraphedUser.getUser(id.id)

   //ret should be Option[SocialUser]
   val ret = user.map(_.createIdentityFromUser) //errors!

   return ret

 }

调用生成似乎是问题的对象的方法。它的特点是扩展了tinkerpop框架的VertexFrame界面。我猜它与它有关。

  def createIdentityFromUser: SocialUser = {

    return new SocialUser(new UserId(getUserId, getProviderId), getFirstName, getLastName, getName, Some(getEmail),
      None, new AuthenticationMethod("userPassword"), None, None, Some(new PasswordInfo(getPasswordInfoHash, getPasswordInfoSalt)))

  }

1 个答案:

答案 0 :(得分:0)

我让方法静态取一个参数并且它有效......不知道为什么但它解决了问题。在java中,这不会出现。