编译期间内部类/对象的列表

时间:2016-08-24 11:43:34

标签: scala

这是我正在处理的类(对象)的简化代码:

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。这不是太多的工作,但是这样的代码并不太优雅。

我的问题是:

我可以在编译期间生成内部对象列表吗?我不想在运行时这样做,这将是一种过度杀伤。

1 个答案:

答案 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
}