scala – 使用反射列出对象中的所有类
发布时间:2020-12-16 09:54:04 所属栏目:安全 来源:网络整理
导读:我有一个像这样的对象: sealed trait Messageobject Message { case class DoSomething(...) extends Message case class DoSomethingElse(...) extends Message ...} 我要做的是创建Message对象中所有Messages的列表. 到目前为止我所拥有的是: val messag
我有一个像这样的对象:
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]] } } 但它对我来说产生的信息不是很多:
据我所知,我在RuntimeMirror上使用reflectClass.我错过了什么吗? 解决方法
在阅读了有关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]] } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |