我在scala 2.11/2.12val mapper = new ObjectMapper(new YAMLFactory())
中使用Jackson read Yaml,我认为我调用的Java构造函数是
public <T> T readValue(String content, Class<T> valueType)
此代码有效
def load(): SomeClass {
mapper.readValue[SomeClass](configStr, classOf[SomeClass])
}
但是我想把这个类改成T
mapper.readValue[T](configStr, classOf[T])
错误class type required but T found
我搜索了一些并将其更改为
def load[T: ClassTag](): T = {
mapper.readValue[T](configStr, classTag[T].runtimeClass)
}
但是它说没有匹配的构造方法
classTag[T].runtimeClass
的返回类型是Class[?]
,您必须使用.asInstanceOf
(在这种用法中是安全的):
mapper.readValue[T](configStr, classTag[T].runtimeClass.asInstanceOf[Class[T]])
请注意,如果您使用的是Jackson Scala模块,为了避免样板文件
,这些方法已经提供给您了。