我有一些这样的代码:
class ReflectiveJsonFormat[T:TypeTag] extends JsonFormat[T] {
def write(x: T) : JsValue = {
val t = typeOf[T]
val getters = t.declarations.filter { s => s.isMethod && s.asMethod.isGetter }
val mirror = runtimeMirror(this.getClass.getClassLoader)
val instanceMiror = mirror.reflect(x)
}
}
最后一行失败,如下所示:
没有适用于T的ClassTag
我还以为TypeTag
比ClassTag
更有信息呢?我可以从TypeTag
获取ClassTag
吗?如果没有,有没有什么语法可以说T
有两个上下文界限-- TypeTag
和ClassTag
?或者,您将如何修复此代码?
发布于 2013-09-11 06:09:43
好吧,scala确实支持多个上下文界限,如果这就是你想要的:
class ReflectiveJsonFormat[T:TypeTag:ClassTag]
发布于 2013-09-11 06:51:25
该库没有提供将TypeTag
直接转换为ClassTag
的内置方法,但您可以编写一个:
import reflect.runtime.universe._
import reflect.ClassTag
def typeToClassTag[T: TypeTag]: ClassTag[T] = {
ClassTag[T]( typeTag[T].mirror.runtimeClass( typeTag[T].tpe ) )
}
然后在您的方法中,只需在需要隐式ClassTag
之前添加:
implicit val c = typeToClassTag[T]
https://stackoverflow.com/questions/18729321
复制相似问题