我想以通用方式使用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的引用,但没有任何效果。正确的解决方法是什么?
答案 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
没有通用类型,因此您需要进行强制转换。)