我使用Apache Spark SQL的SqlParser.parseExpression函数从字符串中读取复杂的值和表达式。解析器工作正常,但我只有一个问题:所有的数值计算结果都是装箱的(作为java.lang.Number的子类),它们不能被类型转换为任何其他兼容的数值类型(例如,java.lang.Double不能被强制转换为Int),由于类型转换参数是动态生成的,我必须编写一个非常长的模式匹配来分别对每个已装箱的类型进行拆箱,有没有一个简短的函数可以用来自动对任何已装箱的数字进行拆箱?
发布于 2016-02-24 18:30:27
对于每个基本的数字类型,java.lang.Number都有intValue()和doubleValue()这样的方法。
您可以只通过调用intValue()方法来检索Number的整数值,而不是模式匹配或强制转换。
如果您确实希望使用模式匹配,则可以使用以下方法:
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)。
https://stackoverflow.com/questions/35594262
复制相似问题