我有一个类名字符串表示
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
最好的方法是什么?有没有办法避免使用反射?
答案 0 :(得分:6)
您可以尝试这样的事情:
val cls = Class.forName(myClassName)
val m = Manifest.classType(cls)
val myObj:Any = JsonConverter.fromJson(stringData)(m)
这种方法的一个细微差别是你必须明确地将对象键入为Any。这是因为您没有将该类作为编译时间,并且未向classType
调用其类型参数,因此返回的Manifest
为Manifest[Nothing]
。不理想,但它有效。