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

Scala 密封案例对象层次结构的实例集,scala,shapeless,scala-cats,Scala,Shapeless,Scala Cats,假设我有以下几点: sealed trait MyEnum object MyEnum { case object Value1 extends MyEnum case object Value2 extends MyEnum ... } 我可以很容易地编写一个宏(使用knownDirectSubclass编写几行代码)来给我case对象的Set[MyEnum] 我相信这一定已经解决了-也许在无形状或猫中有什么东西可以让我不必写宏就可以得到这一集有吗?这可以通过以下方式完成: i

假设我有以下几点:

sealed trait MyEnum

object MyEnum {
  case object Value1 extends MyEnum
  case object Value2 extends MyEnum
  ...
}
我可以很容易地编写一个宏(使用
knownDirectSubclass
编写几行代码)来给我
case对象的
Set[MyEnum]

我相信这一定已经解决了-也许在无形状中有什么东西可以让我不必写宏就可以得到这一集有吗?

这可以通过以下方式完成:

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