Scala反射Generic TypeArgs曝光

时间:2018-02-20 20:25:24

标签: java scala generics reflection

当尝试通过反射在案例类中公开案例访问器时,我似乎被卡在泛型类型参数后面。

说我有这个:

case class test(
  propA: Option[Int],
  propB: String
)

我可以吐出测试用例类的模型但是我坚持这个结果:

{ "subject" : "test",
  "model" : [
    {"field" : "propA", "type" : "A"},
    {"field" : "propB", "type" : "String"}
  ]
}

这些条目以java Fields的形式出现,我使用runtimeMirror来获取Class的ClassSymbol,这是通过Field.getType提供的。

val parameterizedType = runtimeMirror(field.getType.getClassLoader).classSymbol(field.getType)

然后我尝试使用selfType来获取typeArgs,但是如上所示,而不是获取Int我得到A而且它让我卡住了因为我对scala反射并不熟悉。类型曝光使用以下行完成:

parameterizedType.selfType.dealias.typeArgs.map(_.toString).mkString

我试图只使用Scala反射来暴露字段,但我正在检查的类有时是Java类,我遇到了以这种方式暴露字段的问题。

此外,我已经能够公开完整类型路径,但它仍然隐藏参数化类型:

... "propA", "type" : "scala.Option.A"

感谢任何帮助!

0 个答案:

没有答案