我有一个对象,像这样:
sealed trait Message
object Message {
case class DoSomething(...) extends Message
case class DoSomethingElse(...) extends Message
...
}
我将尝试创建一个 Message 对象中所有消息的列表。目前我所拥有的是:
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
据我所见,我正在使用RuntimeMirror
上的reflectClass
。我错过了什么吗?
谢谢
toType
引起了这个问题,你需要改成c.reflectClass.toType <:< typeOf[Message]
? - lmmmirror.reflectClass(c)
,所以我猜不是toType
的问题。 - gysyky