2013-05-06 87 views
2

我有一個類名字符串表示斯卡拉獲取類類型

val cls = Class.forName("clsName") 
def fromJson[T: Manifest](me: String): T = { 
Extraction.extract[T](net.liftweb.json.parse(me)) 
} 

我想用它作爲T:清單即

JsonConverter.fromJson[cls.type](stringData) 

這將返回一個錯誤

也試過

val t = Manifest.classType(cls) 
JsonConverter.fromJson[t](stringData) // compile error 

最好的辦法是什麼?有沒有辦法避免使用反射?

回答

5

你可以嘗試這樣的事:

val cls = Class.forName(myClassName) 
val m = Manifest.classType(cls) 
val myObj:Any = JsonConverter.fromJson(stringData)(m) 

一個細微之處,以這種方法,你必須明確地鍵入對象爲所有。這是因爲您沒有編譯時間的類,且對classType的調用未提供其類型參數,因此Manifest返回的值爲Manifest[Nothing]。不理想,但它的工作原理。

+0

做了幾個更新 – cmbaxter 2013-05-07 10:50:41