我正在使用Apache Spark SQL的SqlParser.parseExpression函数来读取复杂的值&字符串中的表达式。 解析器工作正常,但我只有一个问题:所有数值计算结果都是盒装的(作为java.lang.Number的子类),并且它们不能被类型转换为任何其他兼容的数字类型(例如java.lang.Double不能转换为Int),因为类型转换参数是动态生成的,我必须分别为每个盒装类型的unbox写一个很长的模式匹配,是否有一个简短的函数可以用来自动取消打包任何盒装数字?
答案 0 :(得分:0)
java.lang.Number
都有intValue()
和doubleValue()
等方法。
您可以通过调用Number
方法来检索intValue()
的整数值,而不是模式匹配或转换。
如果您真的想使用模式匹配,那么您可以使用以下内容:
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的de文档(或源代码)以查看它可能返回的数字类型(例如,它可能只返回Double和Long)。