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

Set of instances of sealed case object hierachy

假设我有以下内容:

sealed trait MyEnum

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

我可以很容易地编写一个宏(使用 knownDirectSubclasses 的几行代码)来给我 case objectSet[MyEnum]

我确定这一定已经解决了 - 也许 ShapelessCats 中有一些东西可以给我这个集合不用我写宏? - 有吗?

这可以用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
  }
}