gpt4 book ai didi

scala - 使用反射列出对象中的所有类

转载 作者:行者123 更新时间:2023-12-04 23:00:22 24 4
gpt4 key购买 nike

我有一个对象,如:

sealed trait Message
object Message {
case class DoSomething(...) extends Message
case class DoSomethingElse(...) extends Message
...
}

我想要做的是在 Message 对象中创建所有 Messages 的列表。

到目前为止我所拥有的是:
val messages: Iterable[Class[_ <: Message]] = {
import scala.reflect.runtime.universe._
val mirror = runtimeMirror(this.getClass.getClassLoader).reflect(Message)
typeOf[Message.type].decls.collect {
case c: ClassSymbol if c.toType <:< typeOf[Message] =>
mirror.reflectClass(c).symbol.getClass.asInstanceOf[Class[_ <: Message]]
}
}

但对我来说,它产生的信息错误并不多:

scala.ScalaReflectionException: class DoSomething is a static class, use reflectClass on a RuntimeMirror to obtain its ClassMirror



据我所知,我正在使用 reflectClassRuntimeMirror .我错过了什么吗?
谢谢

最佳答案

在阅读了更多关于 Scala 反射的书,知识更加丰富之后,我找到了解决方案。我只需要:

val messages = {
import scala.reflect.runtime.universe._
val mirror = runtimeMirror(this.getClass.getClassLoader)
typeOf[Message.type].decls.collect {
case c: ClassSymbol if c.toType <:< typeOf[Message] =>
mirror.runtimeClass(c).asInstanceOf[Class[_ <: Message]]
}
}

关于scala - 使用反射列出对象中的所有类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27189258/

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