因为我会从我的websocket获得String
,所以我必须将String
转换为实际类型。是否可以做类似的事情?:
def createThing(cls: String) = {
List[cls.getClass]() // or create actors or something like that
}
createThing("Int") // should produce List[Int]
createThing("Double") // should produce List[Double]
有可能实现这一目标吗?我是反思的新手,因此我找不到解决方案。
答案 0 :(得分:1)
没有。静态类型不能以您希望的方式依赖于运行时数据。例如。应
createThing("Foo")
如果没有定义类Foo
,无法编译?但是,如果没有这个,你可以做很多事情。如果您在单独的问题中更好地指定问题,您可能会得到答案。
答案 1 :(得分:1)
你可以解决这个问题,而不必反思。极简主义的类层次结构可以非常有效地解决问题。这是一个例子:
trait Message
case class StringList(strings: List[String]) extends Message
case class IntList(ints: List[Int]) extends Message
object Create {
def createThing(cls: String): Option[Message] = cls match {
case "strings" => Some(StringList(List[String]("a","b")))
case "ints" => Some(IntList(List[Int](3,4,5)))
case _ => None
}
}
object Main extends App {
val thing = Create.createThing("ints")
thing match {
case Some(a: StringList) => println(s"It was a StringList containing ${a.strings}")
case Some(b: IntList) => println(s"It was an IntList containing ${b.ints}")
case _ => println("Nothing we know about")
}
}