按名称引用泛型类

时间:2017-09-30 04:41:22

标签: scala reflection generic-programming scala-reflect

考虑我想要反序列化JSON字符串的情况:

def deserialize[T](json)

我可以提供类,我想在编写像

这样的代码时显式应用该函数
  class Person(name: String)
  deserialize[Person]("""{ "name": "Jennie" }""")

但是,如果我需要其他类,我必须在我的代码中提供它,再次编译。我希望我的程序更灵活,它可以采用包含我想要使用的类的名称的配置文件。因此,当需要一个新类时,我只需编写类定义,将其构建到另一个jar文件中,将其放在类路径中,然后重新启动该程序。

    val config = ConfigLoader.load("config.txt")
    val className = config.getString("class-to-deserialize")
    deserialize[<from className to type>](json)

那么,是否可以在scala中执行此操作?

1 个答案:

答案 0 :(得分:0)

没有。但是由于类型擦除,如果你有一个函数def deserialize[T](json: String),它的行为首先不能依赖于T,并且你传递的类型参数并不重要。你可能只需要在最后添加一个演员。

的可能性是编写一个也接受隐式ClassTagTypeTag参数的函数,在这种情况下你只需要从类/创建参数类型名称,这完全有可能:只搜索有关此问题。