scala - 在 Scala 中,对案例类类标签使用反射来查找伴随对象的应用方法

标签 scala reflection

这与以下问题有关,但由于它涉及一个独特而突出的问题,我将其作为后续问题提出:Support generic deserialization from a List[(String, Any)] in Scala

如何使用反射找到 ClassTag 的伴随对象的方法?具体来说,我试图以反射方式调用案例类的伴随对象的 apply 方法来构造案例类的实例。

最佳答案

可以 this answer有帮助吗?

这是 scalaVersion := "2.11.1"

的示例
import scala.reflect.runtime.{universe => u}

def companionMembers(clazzTag: scala.reflect.ClassTag[_]): u.MemberScope = {
  val runtimeClass = clazzTag.runtimeClass
  val rootMirror = u.runtimeMirror(runtimeClass.getClassLoader)
  val classSymbol = rootMirror.classSymbol(runtimeClass)
  // get the companion here
  classSymbol.companion.typeSignature.members
}

case class MyClass(value: Int)

val applyMethods =
  companionMembers(scala.reflect.classTag[MyClass])
  .filter { m => m.isMethod && m.name.toString == "apply"}

println(applyMethods)

打印

Scope{
  case def apply(value: scala.Int): MyClass
}

关于scala - 在 Scala 中,对案例类类标签使用反射来查找伴随对象的应用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23921362/

相关文章:

c++ - 用于模拟运行时数字模板参数的成语?

java - java中的语句级反射

scala - 如何使用 Def.app 和 KList 映射任务的依赖关系

scala - Play 2 Scala - 使用 Iteratee 上传大型 CSV 文件以便 react 性地处理每一行的最佳方式

scala - 当我想要构建功能模块创建时如何处理 Vec 输入

java - 是否可以通过 JMX 加载类信息?

java - 使用反射访问不可见的类

algorithm - Scala 流上的归纳证明

spring - 在 Spring MVC 中使用 Scala 类作为 DTO

c# - 使用反射和Linq Except/Intersect比较对象集合的性能较差