有没有办法在运行时发现在外部对象中声明的对象?JavaClass
方法getClasses
和getDeclaredClasses
都返回空数组。
object Parent {
object Child1
object Child2
}
println("Children of Parent:")
println(" getClasses found %d".format(Parent.getClass.getClasses.size))
println(" getDeclaredClasses found %d".format(Parent.getClass.getDeclaredClasses.size))
输出是:
Children of Parent:
getClasses found 0
getDeclaredClasses found 0
编辑:我已经探索过让孩子向父母注册自己:
object Parent {
val children = new collection.mutable.ListBuffer[AnyRef]
object Child1 { Parent.children += this }
object Child2 { Parent.children += this }
}
println("(1) Parent.children size: %d".format(Parent.children.size))
Parent.Child1
Parent.Child2
println("(2) Parent.children size: %d".format(Parent.children.size))
(虽然这看起来很难看,但实际上还可以,因为我可以通过创造性的子类化和隐式参数隐藏这些细节。)
这种方法的问题是在引用每种类型之前不会调用静态初始化程序(因此调用Parent.Child1
and Parent.Child2
),这违背了目的。输出是:
(1) Parent.children size: 0
(2) Parent.children size: 2
编辑2:我知道数据在那里!内部对象列出使用scalap Parent
:
object Parent extends java.lang.Object with scala.ScalaObject {
def this() = { /* compiled code */ }
object Child1 extends java.lang.Object with scala.ScalaObject {
def this() = { /* compiled code */ }
}
object Child2 extends java.lang.Object with scala.ScalaObject {
def this() = { /* compiled code */ }
}
}