Nie*_*and 5 scala type-conversion
我需要做一些原始数据解析,我被迫使用Any类型.如果我读取的数据是任何数字格式(Int/Double/Long/...)我需要将其转换为double,否则(例如String)我需要将其保留为空.这就是我想出的:
def extractDouble(expectedNumber: Any): Option[Double] = expectedNumber match {
case i: Int => Some(i.toDouble)
case l: Long => Some(l.toDouble)
case d: Double => Some(d)
case _ => None
}
Run Code Online (Sandbox Code Playgroud)
这显然看起来不太合适.在scala中有没有更好的方法来解决这个问题?
一旦您在编译时丢失了类型信息,因为它恰好是您的输入类型是Any其要求的一部分,因此没有比expectedNumber运行时检查更多的选项了isInstanceOf.
这可以通过您在建议的解决方案中执行的类型模式匹配来实现.我认为这是您案例中最好的解决方案.
但是,有一种替代方法是使用Try它并将其转换为Option.例如:
Try(expectedNumber.toString.toDouble).toOption
Run Code Online (Sandbox Code Playgroud)
这在很多方面都是一个肮脏的解决方案(根本没有效率,使用控制流的异常......)我会定义地使用你的第一种方法
| 归档时间: |
|
| 查看次数: |
7422 次 |
| 最近记录: |