scala 将 T 类型传递给 Java 构造函数

scala pass T type to Java constructor

我在 scala 2.11/2.12 中使用 Jackson read Yaml val mapper = new ObjectMapper(new YAMLFactory()),我想我调用的 Java 构造函数是

public <T> T readValue(String content, Class<T> valueType)

此代码有效

def load(): SomeClass {
  mapper.readValue[SomeClass](configStr, classOf[SomeClass])
}

但是我想把这个class改成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 的 return 类型是 Class[?],你必须使用 .asInstanceOf(这种用法是安全的):

mapper.readValue[T](configStr, classTag[T].runtimeClass.asInstanceOf[Class[T]])

请注意,如果您使用的是 Jackson Scala 模块,这些方法已经提供给您以避免样板文件