Есть ли способ во время выполнения обнаружить объекты, объявленные внутри внешнего объекта?Java Class
методы 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
и 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 */ }
}
}