首页 > 解决方案 > 具有泛型的递归类的 Scala json 格式

问题描述

我正在尝试将规则捕获到模型中,这就是我所拥有的

trait Criterion[T] {
  val name: String
  def matches(t: T): Future[Boolean]
}
trait Predicate[T] extends Criterion[T] {
  val criteria: Seq[Criterion[T]]
  val operand: RuleOperand.Name

  override def matches(t: T): Future[Boolean] = {
    val predicate: Boolean => Boolean = if (operand == RuleOperand.ANY) _ == true else _ == false
    Future.find(criteria.map(_.matches(t)))(predicate) map {
      case Some(true) if operand == RuleOperand.ANY => true
      case Some(false) if operand == RuleOperand.ALL => true
      case _ => false
    }
  }
}
case class WeightCriterion(limit: Int) extends Criterion[Person] {
  override val name: String = "weight"

  override def matches(person: Person): Future[Boolean] =
     Future.successful(person.weight > limit)
}

case class HeightCriterion(limit: Int) extends Criterion[Person] {
  override val name: String = "height"

  override def matches(person: Person): Future[Boolean] = 
    Future.successful(person.height > limit)
}

Criterion从 Object 到 Json 以及从 Json 到 Object 都可以很好地工作,但是我无法使Predicate格式正常工作,我怎样才能让它工作?

标签: jsonscala

解决方案


推荐阅读