首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从TypeTag中获取ClassTag,或者同时从两者中获取?

如何从TypeTag中获取ClassTag,或者同时从两者中获取?
EN

Stack Overflow用户
提问于 2013-09-11 05:48:46
回答 2查看 4.1K关注 0票数 22

我有一些这样的代码:

代码语言:javascript
复制
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

我还以为TypeTagClassTag更有信息呢?我可以从TypeTag获取ClassTag吗?如果没有,有没有什么语法可以说T有两个上下文界限-- TypeTagClassTag?或者,您将如何修复此代码?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-11 06:09:43

好吧,scala确实支持多个上下文界限,如果这就是你想要的:

代码语言:javascript
复制
class ReflectiveJsonFormat[T:TypeTag:ClassTag] 
票数 18
EN

Stack Overflow用户

发布于 2013-09-11 06:51:25

该库没有提供将TypeTag直接转换为ClassTag的内置方法,但您可以编写一个:

代码语言:javascript
复制
import reflect.runtime.universe._
import reflect.ClassTag

def typeToClassTag[T: TypeTag]: ClassTag[T] = {
  ClassTag[T]( typeTag[T].mirror.runtimeClass( typeTag[T].tpe ) )
}

然后在您的方法中,只需在需要隐式ClassTag之前添加:

代码语言:javascript
复制
implicit val c = typeToClassTag[T]
票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18729321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档