有没有办法为某个类的每个子类自动生成一个伴生对象?
例如,我有一个 class Component[T]
,它有一个 val companion: CompType[T]
,其中 T
应该是子类。例如:class Transform extends Component[Transform]
。
有没有什么办法可以为每个子类生成伴随对象——虽然看起来很小——可以节省为我制作的每种组件输入对象定义的时间?
编辑:
所有这一切的最终目标是一个实体系统。每个伴随对象都有一个唯一的整数(它从继承的特征中获取),可用于从组件数组中查找该特定类型的组件。因此,例如,如果我想向实体添加一个 Transform 组件,我会调用:
addComponent(entity, Transform, new Transform(params))
然后,新的 Transform
对象将被放置在表示实体的组件数组中,索引位于 Transform 伴生对象提供的索引处。但是由于伴随对象从它们继承的特征中获取它们的索引,所以除了它们的名称之外,它们之间没有任何区别。因此,生成它们会很好。
抱歉,一开始没有更具体。如果这仍然令人困惑,那很可能是我以完全错误的方式做这件事!如果您这么认为,请随时告诉我。
最佳答案
我不认为在 Scala 目前有任何方法可以自动生成伴生对象。即将推出的宏类型支持最终可能会对您有所帮助,但这仍在开发中。
如果我没理解错的话,伴生对象的存在只是为了提供每个类的唯一整数?在那种情况下,也许这样的事情会奏效?
scala> object UniqueNumberProvider {
| val numbers = new collection.mutable.HashMap[Class[_], Int]
| def numberForClass(clazz: Class[_]) = numbers.get(clazz) match {
| case Some(n) => n
| case None => numbers.update(clazz, numbers.size + 1); numbers.size
| }
| }
defined module UniqueNumberProvider
scala> UniqueNumberProvider.numberForClass(classOf[String])
res7: Int = 1
scala> UniqueNumberProvider.numberForClass(classOf[String])
res8: Int = 1
scala> UniqueNumberProvider.numberForClass(classOf[Int])
res9: Int = 2
关于Scala:生成伴随对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13991645/