嘿我想在scala中以最好的方式编写下面的代码,如果有更好的方法,请帮助我!
public final <T> T deserialize(String jsonString, Class<T> klass) {
try {
return objectMapper.readValue(jsonString, klass);
} catch (Exception e) {
LOG.error("Failed to deserialize {} to class {}, {}", jsonString, klass, e);
}
return null;
}
是不是很好?
def deserialize[T: Manifest](value: String): T = {
mapper.readValue(value, typeReference[T])
}
答案 0 :(得分:4)
如果您需要获取Class[T]
,请使用scala.reflect.ClassTag
(不是TypeTag
;您可以从中获取Class
,但只能以圆周方式获取def deserialize[T](value: String)(implicit tag: ClassTag[T]): T = {
mapper.readValue(value, tag.runtimeClass.asInstanceOf[Class[T]])
}
:
deserialize[String]("\"a\"")
小心不要忘记调用时的类型参数(例如deserialize("\"a\"")
,而不是Nothing
),否则Scala会将其推断为deserialize[java.lang.Integer]("1")
。
你也可能需要传递盒装类而不是原语(例如{{1}}),如果是这样你可以修复问题,但这需要额外的代码。