这是我正在处理的类(对象)的简化代码:
object T {
val default = A
val options = List(A,B,C)
sealed trait T
object A extends T {
override def toString = "A"
}
object B extends T {
override def toString = "B"
}
object C extends T {
override def toString = "C"
}
}
此层次结构直接映射到需要options = List(A,B,C)
构建的GUI元素。
当前方法存在问题:
option
。这不是太多的工作,但是这样的代码并不太优雅。我的问题是:
我可以在编译期间生成内部对象列表吗?我不想在运行时这样做,这将是一种过度杀伤。
答案 0 :(得分:2)
要添加@ Samar的评论,请说清楚。您需要以下内容:
import scala.reflect.runtime.universe._
case object K {
val default = A
val options = getObjects[this.type]
sealed trait T
object A extends T {
override def toString = "A"
}
object B extends T {
override def toString = "B"
}
object C extends T {
override def toString = "C"
}
def getObjects[T: TypeTag] = typeOf[T].members.collect {
case m: ModuleSymbol if m.isModule => m
}.toList
}