在这个应用程序中,我得到了这个错误:
scala.Some cannot be cast to java.lang.String
尝试此操作时:
x.email.asInstanceOf[String]
x.email是一个OptionString
编辑:我知道我在这里处理的是不同的类型,我只是想知道有没有一种更简洁的方法来不做任何事情,而不是一个
match { case....}
序列。因为出于JSON的目的,我将x.email转换为字符串,所以空字段将由JSON对象处理,而我不必显式地处理它。抱歉,我说得不清楚!
发布于 2013-07-12 17:31:05
从错误和类型可以清楚地看出,x.email
不是String
...
首先,决定您希望如何处理None
(对于Option[String]
类型的内容来说,这是一个有效的选项)。然后,您有许多选项,包括但不限于:
x.email match {
case None => ...
case Some(value) => println(value) // value is of type String
}
或者,看看class Option
上的get
和getOrElse
方法。
如果希望将选项“降级”为具有可能的null
值的字符串,则使用
x.email.orNull // calls getOrElse(null)
最后,如果你不关心理解(并且想忽略它),那么只需使用一个简单的"for None
“,它将”跳过“None
中的主体:
for (value <- x.email) {
// value is of type String
}
发布于 2013-07-12 17:34:21
当涉及到选项时,强制转换不是你应该看转换的方式。看看下面的REPL会话:
C:\>scala -deprecation -unchecked
Welcome to Scala version 2.10.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0).
Type in expressions to have them evaluated. Type :help for more information.
scala> val email:Option[String] = Some("x@y.com")
email: Option[String] = Some(x@y.com)
scala> email.getOrElse("defaults@example.com")
res0: String = x@y.com
scala>
您可能还想看看这个SO问题:What is the point of the class Option[T]?
和选项API here
一般来说,在FP的世界里,强制/强制是一种禁忌。:)
发布于 2013-07-31 01:32:35
x.map(_.toString).getOrElse("")
https://stackoverflow.com/questions/17620554
复制相似问题