2

我有一个类名字符串表示

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

我想用它作为 T:manifest 即

JsonConverter.fromJson[cls.type](stringData)

这会返回一个错误

也试过

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

最好的方法是什么?有没有办法避免使用反射?

4

1 回答 1

6

你可以尝试这样的事情:

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

这种方法的一个细微差别是您必须将对象显式键入为 Any。这是因为您没有将类作为编译时,并且调用classType未提供其类型参数,因此Manifest返回的是Manifest[Nothing]. 不理想,但它有效。

于 2013-05-06T16:11:11.860 回答