Scala反射- Java枚举泛型对象



我正在使用Scala 2.10,我正在努力使用以下反序列化java枚举的通用方法。

class FromEnumFormat[T<: Enum[T]] extends JsonFormat[T] {
  import scala.reflect._
  implicit val m = classTag[T]
  override def read(json: JsValue): T = {
    val EnumerationClass  = m.runtimeClass.asInstanceOf[Class[T]]
    json match {
      case s :JsString if EnumerationClass.getEnumConstants.map(_.toString.toLowerCase).contains(s) => Enum.valueOf(EnumerationClass ,s.value.toUpperCase()).asInstanceOf[T]
      case unknown => deserializationError(s"unknown Status: ${unknown}")
    }
  }
  override def write(obj: T): JsValue = {JsString(obj.name().toLowerCase)}
}

我得到的错误信息是:

 No ClassTag available for T

这很明显,但我不知道如何正确解决它。有人能给我点提示吗?

这应该能解决你的问题

class FromEnumFormat[T<: Enum[T]: ClassTag] extends JsonFormat[T] {
  import scala.reflect._
  val m = classTag[T]
  override def read(json: JsValue): T = {
    val EnumerationClass  = m.runtimeClass.asInstanceOf[Class[T]]
    json match {
      case s :JsString if EnumerationClass.getEnumConstants.map(_.toString.toLowerCase).contains(s) => Enum.valueOf(EnumerationClass ,s.value.toUpperCase()).asInstanceOf[T]
      case unknown => deserializationError(s"unknown Status: ${unknown}")
    }
  }
  override def write(obj: T): JsValue = {JsString(obj.name().toLowerCase)}
}

相关内容

  • 没有找到相关文章