scala - 在 Scala 中将类类型作为参数传递
问题描述
我想解析一个 Json 对象。我定义了以下类:
case class Metadata(
val messageTime: Option[String],
val messageUUID: Option[String],
val messageSource: Option[String],
val messageFormat: Option[String])
我生成这种类型的虚拟对象:
jsonMsg = """{"messageTime": "2018-09-19T11:03:22.382+04:00",
"messageUUID": "4ef7fce7-81cf-4a27-82d8-9019c2cf09df",
"messageSource" : "SDG",
"messageFormat" : "json"}"""
现在我想用来mapper.readValue
将该字符串解析为元数据类型的对象:
fromJson(jsonMsg)
def fromJson(json : String) = {
mapper.readValue[Metadata](json, classOf[Metadata])
}
这工作正常。但是在这种情况下 fromJson 只能解析 Metadata 对象。
现在我试图让我的方法 fromJson 更通用,像这样传递要解析的对象的类[我用这个另一个问题作为参考]:
val obj = fromJson2(jsonMsg, classOf[Metadata])
def fromJson2(json : String, c: Class[_]) = {
mapper.readValue(json, c)
}
但我得到了错误:
前向引用扩展了值 obj 的定义
我错过了什么,或者我怎样才能实现我正在尝试的目标?
以防万一
mapper.readValue
属于import com.fasterxml.jackson.databind.ObjectMapper
这是定义:
public <T> T readValue(String content, Class<T> valueType)
throws IOException, JsonParseException, JsonMappingException
{
return (T) _readMapAndClose(_jsonFactory.createParser(content), _typeFactory.constructType(valueType));
}
解决方案
推荐阅读
- c++ - Factories: how to pass temporary smart pointers to functions. C++
- javascript - React 获取在 props 中传递的子元素的原生元素或高度和宽度
- c# - 登录尝试在页面加载时重置
- python - 使用 Dropout 层的 noise_shape。Batch_size 不适合提供的样本。该怎么办?
- html - 如何减小背景img url的大小
- sqlite - 关闭时清理 sqlite db 文件
- symfony - FOSCKEditorBundle 仅在英语中不起作用,在私人模式下不起作用,专注于文本不起作用
- unit-testing - Symfony 4.1:如何在 UnitTest 中使用依赖注入(Swift_Mailer)
- javascript - V8 WasmModuleBuilder 从函数返回多个值
- c - 从 C 向 Python 发送 XDR 序列化数据的问题