Rob*_*b N 22 reflection scala context-bound scala-2.10
我有一些像这样的代码:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
最后一行失败了:
没有ClassTag可用于T
我以为TypeTag
是比一个更多的信息ClassTag
?我能得到ClassTag
从TypeTag
?如果没有,是否有一些语法可以说T
有两个上下文边界 - 两个TypeTag
和ClassTag
?或者,您将如何修复此代码?
gou*_*ama 34
该库不提供直接转换一个内置的方法TypeTag
来一个ClassTag
,但你可以写一个:
import reflect.runtime.universe._
import reflect.ClassTag
def typeToClassTag[T: TypeTag]: ClassTag[T] = {
ClassTag[T]( typeTag[T].mirror.runtimeClass( typeTag[T].tpe ) )
}
Run Code Online (Sandbox Code Playgroud)
然后在你的方法中只需在隐含ClassTag
需要之前添加:
implicit val c = typeToClassTag[T]
Run Code Online (Sandbox Code Playgroud)
Rég*_*les 18
scala确实支持多个上下文边界,如果这是你所追求的:
class ReflectiveJsonFormat[T:TypeTag:ClassTag]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3485 次 |
最近记录: |