gpt4 book ai didi

scala - 从类名字符串中获取 TypeTag

转载 作者:行者123 更新时间:2023-12-04 18:48:14 27 4
gpt4 key购买 nike

一个简单的问题,如何从类名中获取 TypeTag

所以基本上 TypeTag 相当于 Java 中的 Class.forName

注意:Manifest 在这里不适合我,我需要一个 TypeTag。尽管如果有从 list 到类型标签的方法,那也可以,因为我可以从类名中获取 list 。

最佳答案

Manifests 已被弃用,可能会在未来的 Scala 版本中消失。我不认为依赖他们是明智的。你只能使用新的 Scala 反射来做你想做的事。

你可以从一个字符串到一个Class来获取它的类加载器,然后可以从一个Class创建一个TypeTag > 通过镜子,如 this answer 中所述.这是一段稍微改编的代码来演示它:

import scala.reflect.runtime.universe._
import scala.reflect.api

def stringToTypeTag[A](name: String): TypeTag[A] = {
val c = Class.forName(name) // obtain java.lang.Class object from a string
val mirror = runtimeMirror(c.getClassLoader) // obtain runtime mirror
val sym = mirror.staticClass(name) // obtain class symbol for `c`
val tpe = sym.selfType // obtain type object for `c`
// create a type tag which contains above type object
TypeTag(mirror, new api.TypeCreator {
def apply[U <: api.Universe with Singleton](m: api.Mirror[U]) =
if (m eq mirror) tpe.asInstanceOf[U # Type]
else throw new IllegalArgumentException(s"Type tag defined in $mirror cannot be migrated to other mirrors.")
})
}

关于scala - 从类名字符串中获取 TypeTag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23785439/

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