scala.Some无法强制转换为java.lang.String

Ale*_*her 8 casting scala scalatra

在这个应用程序中,我收到此错误:

scala.Some cannot be cast to java.lang.String
Run Code Online (Sandbox Code Playgroud)

在尝试这个时:

x.email.asInstanceOf[String]
Run Code Online (Sandbox Code Playgroud)

x.email是一个选项[String]

编辑:我知道我在这里处理不同的类型,我只是想知道是否有一个更简洁的方法什么都不做,然后一个

match { case....}
Run Code Online (Sandbox Code Playgroud)

序列.因为我将x.email转换为String以用于JSON目的,所以JSON对象将处理空字段,并且我没有明确地处理它.很抱歉不清楚!!

Ric*_*tze 10

嗯,这是从错误和类型清楚你说x.email是不是String

首先,决定你想要处理的方式None(某种类型的有效选项Option[String]).然后,您有许多选项,包括但不限于:

x.email match {
case None => ...
case Some(value) => println(value) // value is of type String
}
Run Code Online (Sandbox Code Playgroud)

或者,看看getgetOrElse方法class Option.

如果要将具有可能null值的String的选项"降级" ,请使用

x.email.orNull // calls getOrElse(null)
Run Code Online (Sandbox Code Playgroud)

最后,如果你只是不关心这个None案例(并且想要忽略它),那么只需使用一个简单的"for comprehension",它将"跳过" None案例中的正文:

for (value <- x.email) {
  // value is of type String
}
Run Code Online (Sandbox Code Playgroud)

  • 您可能使用`orNull`而不是`getOrElse(null)`. (2认同)