【问题标题】:Refer generic class by name按名称引用泛型类
【发布时间】:2017-09-30 04:41:21
【问题描述】:

考虑我想反序列化一个 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 中做到这一点吗?

【问题讨论】:

    标签: scala reflection generic-programming scala-reflect


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-16
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多