密封案例对象层次的实例集

时间:2018-05-02 07:26:44

标签: scala shapeless scala-cats

想象一下,我有以下内容:

sealed trait MyEnum

object MyEnum {
  case object Value1 extends MyEnum
  case object Value2 extends MyEnum
  ...
}

我可以相当轻松地编写一个宏(使用knownDirectSubclasses的几行代码)来提供Set[MyEnum]的{​​{1}}。

我确信这肯定已经解决了 - 也许在无形中有一些东西会给我这个集合而不必编写宏吗? - 有吗?

1 个答案:

答案 0 :(得分:1)

可以使用Enumeratum

完成此操作
import enumeratum._
import scala.collection.immutable

object Test {
  def main(args: Array[String]): Unit = {
    sealed trait MyEnum extends EnumEntry

    object MyEnum extends Enum[MyEnum] {
      case object Value1 extends MyEnum
      case object Value2 extends MyEnum

      override def values: immutable.IndexedSeq[MyEnum] = findValues
    }

    val res: Set[MyEnum] = MyEnum.values.toSet
  }
}