Scala从字符串表示中获取类类型

igx*_*igx 2 serialization scala

我有一个类名字符串表示

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

我想用它作为T:显示即

JsonConverter.fromJson[cls.type](stringData)
Run Code Online (Sandbox Code Playgroud)

这会返回一个错误

也尝试过

val t = Manifest.classType(cls)
JsonConverter.fromJson[t](stringData) // compile error 
Run Code Online (Sandbox Code Playgroud)

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

cmb*_*ter 6

你可以尝试这样的事情:

val cls = Class.forName(myClassName)
val m = Manifest.classType(cls)
val myObj:Any = JsonConverter.fromJson(stringData)(m) 
Run Code Online (Sandbox Code Playgroud)

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