Набор экземпляров иерархии объектов запечатанного дела

Представьте, что у меня есть следующее:

sealed trait MyEnum

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

Я мог бы довольно легко написать макрос (это несколько строк кода с использованием knownDirectSubclasses), чтобы получить Set[MyEnum] из case object.

Я уверен, что это должно быть уже решено - возможно, есть что-то в Shapeless или Cats, что даст мне этот набор без необходимости писать макрос? - Есть?


person Cheetah    schedule 02.05.2018    source источник


Ответы (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
  }
}
person Yuval Itzchakov    schedule 02.05.2018