2017-09-30 160 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參數,在這種情況下,你只需要創建一個類/類型名稱的參數,這是完全有可能的:只要搜索問題對這個。