2017-09-30 159 views
0

考虑,我想反序列化JSON字符串的情况:按名称引用泛型类

def deserialize[T](json) 

我可以提供类,我想应用的功能明确,而像

class Person(name: String) 
    deserialize[Person]("""{ "name": "Jennie" }""") 

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

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

那么,是不是可以做到的是,在Scala呢?

回答

0

不是,但由于类型擦除,如果您有一个功能def deserialize[T](json: String),它的行为首先不能取决于T,并且您传递的类型参数无关紧要。您可能只需在最后添加演员表。

什么可能是写一个这样的功能,也可以接受一个隐含的ClassTagTypeTag参数,在这种情况下,你只需要创建一个类/类型名称的参数,这是完全有可能的:只要搜索问题对这个。