2013-05-06 186 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