Scala反射 - Java枚举通用对象

时间:2015-09-18 12:35:32

标签: scala generics reflection scala-reflect

我正在使用Scala 2.10,我正在努力使用通用方法对java枚举进行反序列化。

else

我得到的错误信息是:

if ( !$exists ) {
    wc_add_notice( __('ایمیل وارد شده برای معرف اشتباه می باشد' ), 'error' );
} else {
    wc_setcookie(.......) ; //set you cookie params
}

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

1 个答案:

答案 0 :(得分:1)

这应该可以解决您的问题

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