首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >不能将scala.Some转换为java.lang.String

不能将scala.Some转换为java.lang.String
EN

Stack Overflow用户
提问于 2013-07-13 01:22:14
回答 4查看 20.2K关注 0票数 8

在这个应用程序中,我得到了这个错误:

代码语言:javascript
代码运行次数:0
运行
复制
scala.Some cannot be cast to java.lang.String

尝试此操作时:

代码语言:javascript
代码运行次数:0
运行
复制
x.email.asInstanceOf[String]

x.email是一个OptionString

编辑:我知道我在这里处理的是不同的类型,我只是想知道有没有一种更简洁的方法来不做任何事情,而不是一个

代码语言:javascript
代码运行次数:0
运行
复制
match { case....}

序列。因为出于JSON的目的,我将x.email转换为字符串,所以空字段将由JSON对象处理,而我不必显式地处理它。抱歉,我说得不清楚!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-13 01:31:05

从错误和类型可以清楚地看出,x.email不是String...

首先,决定您希望如何处理None (对于Option[String]类型的内容来说,这是一个有效的选项)。然后,您有许多选项,包括但不限于:

代码语言:javascript
代码运行次数:0
运行
复制
x.email match {
case None => ...
case Some(value) => println(value) // value is of type String
}

或者,看看class Option上的getgetOrElse方法。

如果希望将选项“降级”为具有可能的null值的字符串,则使用

代码语言:javascript
代码运行次数:0
运行
复制
x.email.orNull // calls getOrElse(null)

最后,如果你不关心理解(并且想忽略它),那么只需使用一个简单的"for None“,它将”跳过“None中的主体:

代码语言:javascript
代码运行次数:0
运行
复制
for (value <- x.email) {
  // value is of type String
}
票数 10
EN

Stack Overflow用户

发布于 2013-07-13 01:34:21

当涉及到选项时,强制转换不是你应该看转换的方式。看看下面的REPL会话:

代码语言:javascript
代码运行次数:0
运行
复制
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的世界里,强制/强制是一种禁忌。:)

票数 4
EN

Stack Overflow用户

发布于 2013-07-31 09:32:35

代码语言:javascript
代码运行次数:0
运行
复制
x.map(_.toString).getOrElse("")
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17620554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档