首页 > 解决方案 > 在 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));
} 

标签: scala

解决方案


推荐阅读