首页 > 解决方案 > 是否可以序列化/反序列化枚举?

问题描述

假设我定义以下内容:

object Numbers extends Enumeration {
  val One = Value(1)
  val Two = Value(2)
  val Three = Value(3)
}

我希望能够存储这个值(理想情况下作为字符串,但 Int 可以)。假设我执行以下操作:

    val x = Test.Two
    val s = x.toString
    val i = x.id

那么有没有办法恢复这个值呢?

val y = ??? // Restore from either s or i

标签: scala

解决方案


你可以使用 withName 函数

object Numbers extends Enumeration {
  val One = Value(1)
  val Two = Value(2)
  val Three = Value(3)
}

val name = Numbers.Two.toString
val restoredValue = Numbers.withName(name)

但如果值具有 String 类型,它就行不通了……另一种方法是通过 id

val saved = Numbers.Two.id
val list = Numbers.values.toArray
val restored = list(saved)

推荐阅读