密封案例对象层次结构的实例集
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 object
的 Set[MyEnum]
。
我确定这一定已经解决了 - 也许 Shapeless 或 Cats 中有一些东西可以给我这个集合不用我写宏? - 有吗?
这可以用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
}
}
假设我有以下内容:
sealed trait MyEnum
object MyEnum {
case object Value1 extends MyEnum
case object Value2 extends MyEnum
...
}
我可以很容易地编写一个宏(使用 knownDirectSubclasses
的几行代码)来给我 case object
的 Set[MyEnum]
。
我确定这一定已经解决了 - 也许 Shapeless 或 Cats 中有一些东西可以给我这个集合不用我写宏? - 有吗?
这可以用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
}
}