Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >不能将scala.Some转换为java.lang.String

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

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

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

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

尝试此操作时:

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

x.email是一个OptionString

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

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-12 17:31:05

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

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

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

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

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

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

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

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

Stack Overflow用户

发布于 2013-07-12 17:34:21

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 01:32:35

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

https://stackoverflow.com/questions/17620554

复制
相关文章
char转换为数字_char字符转int
刷题遇到一个考点是 char型数字 转 int 进行计算的问题。一看就会,一做就错,显然是在这里的认识薄弱了。将一番搜索的结果记录下来,以备再忘来打脸。
全栈程序员站长
2022/11/10
4.1K0
string转换为jsonarray_jsonobject转jsonarray
如果用的是fastjson 则导包为 import com.alibaba.fastjson.JSONObject
全栈程序员站长
2022/09/22
1.9K0
string转换为jsonarray_jsonobject转jsonarray
将tensor转换为图像_tensor转int
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
11.4K0
利用人工智能将标准视频转换为高清慢镜视频
NVIDIA研究人员日前研发出一个基于深度学习的系统,能够将每秒30帧的视频转换为高清慢镜视频,其效果优于其它同类方法当前能够实现的最佳效果。
GPUS Lady
2018/08/01
6230
利用人工智能将标准视频转换为高清慢镜视频
VS C++打开文件对话框报错:不能将char[]转换为LPWSTR
这个是字符集的问题,打开属性管理器->常规->字符集->使用多字节字符集 测试代码: #include <windows.h> #include <stdlib.h> #include <iostre
渔父歌
2019/10/23
6620
VS C++打开文件对话框报错:不能将char[]转换为LPWSTR
jsonobject string转json_string转换为long
本文使用一个小例子展示在java中怎样将一个JSON格式的字符串转化为JSONObject对象。注意,我们使用的是 org.json.simple.JSONObject;
全栈程序员站长
2022/09/22
3.3K0
jsonobject string转json_string转换为long
verilog语言转vhdl语言_vhdl转换为verilog
1.下载后先运行X-HDL-4.2.1-Setup.exe文件,选择安装路径,注意路径中不要有中文。 2.运行crack_xhdl_4.2.1.exe文件,选择刚刚你安装XHDL的路径下的\bin文件夹,点击next—finish,出现success代表激活成功教程成功。 3.可能会要求你重启电脑,这时候同意重启就好了。 4.重启之后运行X-HDL。 5.可以选择VHDL转Verilog或Verilog转VHDL
全栈程序员站长
2022/11/08
1.8K0
verilog语言转vhdl语言_vhdl转换为verilog
转型,还是不转,是个问题
常规情况下数字化转型,大家瞄向的目标多是大企业,多少会有信息化部门,也多少会有些信息化系统的应用,在信息化系统使用不畅时,有内部信息化部门承担解惑推动的作用。
MavenTalker
2022/11/28
2430
转型,还是不转,是个问题
integer转string java_Integer转换为String类型[通俗易懂]
Exception in thread “main” java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
全栈程序员站长
2022/11/01
2.1K0
outputstream转byte数组_int类型转换为byte类型
Java中将inputstream输入流转换成byte[]字节数组
全栈程序员站长
2022/11/08
7.8K0
C语言中把数字转换为字符串 【转】
在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。 sprintf 是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] ... ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数: 格式化字符串上。 printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要 的字符串。 格式化数字字符串 sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代 itoa。 如: //把整数123 打印成一个字符串保存在s 中。 sprintf(s, "%d", 123); //产生"123" 可以指定宽度,不足的左边补空格: sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567" 当然也可以左对齐: sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567" 也可以按照16 进制打印: sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐 sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐 这样,一个整数的16 进制字符串就很容易得到,但我们在打印16 进制内容时,通常想要一种左边补0 的等宽格式,那该怎么做呢?很简单,在表示宽度的数字前面加个0 就可以了。 sprintf(s, "%08X", 4567); //产生:"000011D7" 上面以”%d”进行的10 进制打印同样也可以使用这种左边补0 的方式。 这里要注意一个符号扩展的问题:比如,假如我们想打印短整数(short)-1 的内存16 进制表示形式,在Win32 平台上,一个short 型占2 个字节,所以我们自然希望用4 个16 进制数字来打印它: short si = -1; sprintf(s, "%04X", si); 产 生“FFFFFFFF”,怎么回事?因为spritnf 是个变参函数,除了前面两个参数之外,后面的参数都不是类型安全的,函数更没有办法仅仅通过一个“%X”就能得知当初函数调用前参数压栈时被压进来的到底 是个4 字节的整数还是个2 字节的短整数,所以采取了统一4 字节的处理方式,导致参数压栈时做了符号扩展,扩展成了32 位的整数-1,打印时4 个位置不够了,就把32 位整数-1 的8 位16 进制都打印出来了。 如果你想看si 的本来面目,那么就应该让编译器做0 扩展而不是符号扩展(扩展时二进制左边补0 而不是补符号位): sprintf(s, "%04X", (unsigned short)si); 就可以了。或者: unsigned short si = -1; sprintf(s, "%04X", si); sprintf 和printf 还可以按8 进制打印整数字符串,使用”%o”。注意8 进制和16 进制都不会打 印出负数,都是无符号的,实际上也就是变量的内部编码的直接的16 进制或8 进制表示。 控制浮点数打印格式 浮点数的打印和格式控制是sprintf 的又一大常用功能,浮点数使用格式符”%f”控制,默认保 留小数点后6 位数字,比如: sprintf(s, "%f", 3.1415926); //产生"3.141593" 但有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf”格式,其中m 表 示打印的宽度,n 表示小数点后的位数。比如: sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142" sprintf(s, "%-10.3f", 3.1415626); //产生:"3.142 " sprintf(s, "%.3f", 3.1415626); //不指定总宽度,产生:"3.142" 注意一个问题,你猜 int i = 100; sprintf(s, "%.2f", i); 会打出什么东东来?“100.00”?对吗?自己试试就知道了,同时也试试下面这个: sprintf(s, "%.2f", (double)i); 第 一个打出来的肯定不是正确结果,原因跟前面提到的一样,参数压栈时调用者并不知道跟i相对应
用户2038589
2018/09/06
16.8K0
integer转换为string_go 字符串转int
str := “123” // string 转 int i, err := strconv.Atoi(str) if err == nil {   fmt.Printf(“i: %v\n”,i) } // string 转 int64 i64,err := strconv.ParseInt(str,10,64) if err == nil {   fmt.Printf(“i64: %v\n”,i64) } // string 转 int32 j,err := strconv.ParseInt(str,10,32) if err == nil {   fmt.Printf(“i32: %v\n”,int32(j)) }
全栈程序员站长
2022/11/06
3.4K0
java map 转string_java-将Map <String,Object>转换为Map <String,String>
Map map = new HashMap(); //Object is containing String
全栈程序员站长
2022/08/25
12.3K0
Hibernate java.lang.String cannot be cast to Customer
如果不是取得单个字段的话就没有问题,去单个字段就会出现取到值了,但是拿不出来值,因为不知道得到的东西是什么类型的。说是String的吧,转换出错,说是对象吧,又抛出如题的异常。
the5fire
2019/02/28
7750
ffmpeg只转封装不转码的代码实现
在有些场景下,其实只需要转封装,不需要转码, 大概步骤如下: 1. 打开输入的formatcontext 2. 打开输出文件 3. 打开输出的formatcontext 4. 写文件头 5. 复制codec信息 6. 读取输入frame 7. 写输出frame 8. 写文件尾 9. 关闭输出文件 代码如下:
用户3765803
2019/03/05
1.2K0
Java源码学习 -- java.lang.String
java.lang.String是使用频率非常高的类。要想更好的使用java.lang.String类,了解其源代码实现是非常有必要的。由java.lang.String,自然联想到java.lang
YGingko
2017/12/28
5200
JDK源码解析之 Java.lang.String
String类是一个被final修饰的常量类,常量类的特性为不可被任何类所继承,一旦String对象被创建,该对象是无法被改变的,直至该对象被销毁(特殊情况除外:如暴力反射)。
栗筝i
2022/12/01
2960
撑不起未来愿景,人工智能将再一次迎来“凛冬”?
自1950年阿兰·图灵在其开创性论文——《计算机器与智能》中首次提出“机器能思考吗?”这个问题以来,人工智能的发展并非一帆风顺,也尚未实现其“通用人工智能”的目标。
科技云报道
2022/12/08
3380
撑不起未来愿景,人工智能将再一次迎来“凛冬”?
JsBase64位转换为blob上传到服务器
var localData= 'data:image/png...'; //假定dataUrl为base64位 let base = atob(localData.substring(localData.indexOf(',') + 1)); // base是将base64编码解码,去掉data:image/png;base64部分 let length = base.length; let url = new Uint8Array(length); while (length
明知山
2020/09/02
1.1K0
不转字符串判断——LeetCode题目9:回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。但你不能使用转字符串后判断的方法。
二环宇少
2020/08/13
5000

相似问题

Slick: ClassCastException: scala.Some不能转换为java.lang.String

10

不能将scala.Some转换为自定义对象

24

不能将scala.Some转换为scala.collection.immutable.Map异常

20

java.lang.String :不兼容类型:不能将转换为双重类型

11

不能将DataModel转换为java.lang.String

34
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文