Scala:通用类

时间:2019-04-29 06:52:56

标签: json scala class generics

我想以通用方式使用scala 2.11.8加载和解析JSON文件,如下所示:

private val objectMapper = new ObjectMapper with ScalaObjectMapper
objectMapper.registerModule(DefaultScalaModule)

def loadFile[T](path: Path): Try[T] = Try(
  objectMapper.readValue(Files.readAllBytes(path), classOf[T])
)

然后目标是仅使用预期的返回类型来调用loadFile方法。

但是这使我返回:

class type required but T found

通过谷歌搜索,我发现了对擦除,清单,ClassTag的引用,但没有任何效果。正确的解决方法是什么?

1 个答案:

答案 0 :(得分:3)

通用类型被删除,因此您需要一个ClassTag才能使其正常工作。这是您如何使用它们:

def loadFile[T: ClassTag](path: Path): Try[T] = Try(
  objectMapper.readValue(
    Files.readAllBytes(path),
    implicitly[ClassTag[T]].runtimeClass.asInstanceOf[Class[T]])
)

(由于某些原因,runtimeClass没有通用类型,因此您需要进行强制转换。)