gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:55:50 39 4
gpt4 key购买 nike

这与以下问题有关,但由于它涉及一个独特而突出的问题,我将其作为后续问题提出: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/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com