Scala如何获得所有继承trait的子对象
trait Base
object A extends Base // 正常,处理事件
object B extends Base // 正常,处理事件
object C extends Base // 正常,处理事件
class D extents Base // 异常
object Base {
//TODO 验证继承 trait Base 的是否都是 object,不是则抛异常
//TODO 分发从 akka actor 获取到的 event 到 Base 各自子对象中
}
- 当使用
akka
抛出Event
事件时,我希望通知所有继承了特质Base
的对象ABC,它们各自再对事件进行各自的操作。 - 现在想要的效果是
akka
抛出的事件由Base
的伴生对象统一分发处理,同时验证继承Base
的是否都是object
单例。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这里需要用到反射机制:使用 Java 类库
reflections
里的getSubTypesOf
获取所有子类,但想获得其对应的对象需要通过getField
获得MODULE$
字段,根据该字段就可以获得对应的对象。因为在Scala中,单例对象和伴生对象编译完后会生成两个class文件:
Base.class
和Base$.class
。Base$.class
类中有一个常量字段MODULE$
,它的类型就是当前类Test$
的类类型。