object UtilitiesHelper extends App {
override def main(args: Array[String]): Unit = {
def convert(value: String, targetType: Any): Any = {
targetType match {
case _: Int => value.toInt
case _: Float => value.toFloat
case _: Double => value.toDouble
case _: String => value
}
}
def convert2(value: String, targetType: Any): Any = {
targetType match {
case Int => value.toInt
case Float => value.toFloat
case Double => value.toDouble
// Hack #1
case _ => value
// Ideally we want
//case String => value
}
}
println(convert("1", 1))
println(convert("1.0", 1.0))
println(convert("Hello world", ""))
println(convert2("1", Int))
println(convert2("1.0", Double))
// Hack #2
println(convert2("Hello world", "".getClass()))
// Ideally we want
//println(convert2("Hello world", String)))
}
}
Каков правильный способ выполнения того, что делают хаки # 1 и # 2?Как использовать тип String в качестве параметра?
Я не могу понять, почему convert2 ("1", String) дает ошибку времени компиляции (с сообщением "объект java.lang.String не является значением"), тогда как convert2 ("1", Int) компилируется и работает отлично. Связано ли это с тем, что Int является родным типом Scala, а String является псевдонимом для java.lang.String?
Идеальное решение! Огромное спасибо. –