考虑我想要反序列化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中执行此操作?
答案 0 :(得分:0)
没有。但是由于类型擦除,如果你有一个函数def deserialize[T](json: String)
,它的行为首先不能依赖于T
,并且你传递的类型参数并不重要。你可能只需要在最后添加一个演员。
的可能性是编写一个也接受隐式ClassTag
或TypeTag
参数的函数,在这种情况下你只需要从类/创建参数类型名称,这完全有可能:只搜索有关此问题。