首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在scala中,如何拆开数值类型的不同Java包装器

在scala中,如何拆开数值类型的不同Java包装器
EN

Stack Overflow用户
提问于 2016-02-24 13:50:02
回答 1查看 154关注 0票数 0

我使用Apache Spark SQL的SqlParser.parseExpression函数从字符串中读取复杂的值和表达式。解析器工作正常,但我只有一个问题:所有的数值计算结果都是装箱的(作为java.lang.Number的子类),它们不能被类型转换为任何其他兼容的数值类型(例如,java.lang.Double不能被强制转换为Int),由于类型转换参数是动态生成的,我必须编写一个非常长的模式匹配来分别对每个已装箱的类型进行拆箱,有没有一个简短的函数可以用来自动对任何已装箱的数字进行拆箱?

EN

回答 1

Stack Overflow用户

发布于 2016-02-24 18:30:27

对于每个基本的数字类型,java.lang.Number都有intValue()doubleValue()这样的方法。

您可以只通过调用intValue()方法来检索Number的整数值,而不是模式匹配或强制转换。

如果您确实希望使用模式匹配,则可以使用以下方法:

代码语言:javascript
复制
val x: java.lang.Number = new java.lang.Double(5)
(x: Any) match {
  case d: Double => "this is a double"
  case i: Int => "this is an int"
  case _ => "this is something else"
}
// returns "this is a double"

这样的模式匹配仍然很长,但是你可以查看SqlParser.parseExpression的文档(或源代码),看看它可能返回哪些数值类型(例如,它可能只返回Double和Long)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35594262

复制
相关文章

相似问题

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