加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala:为枚举添加方法

发布时间:2020-12-16 18:20:01 所属栏目:安全 来源:网络整理
导读:我有这样一个简单的枚举: object ConditionOperator extends Enumeration { val Equal = Value("equal") val NotEqual = Value("notEqual") val GreaterOrEqual = Value("greaterOrEqual") val Greater = Value("greater") val LessOrEqual = Value("lessOr
我有这样一个简单的枚举:

object ConditionOperator extends Enumeration {

  val Equal           = Value("equal")
  val NotEqual        = Value("notEqual")
  val GreaterOrEqual  = Value("greaterOrEqual")
  val Greater         = Value("greater")
  val LessOrEqual     = Value("lessOrEqual")
  val Less            = Value("less")

我想为每个枚举添加一个方法,以便我可以像这样使用它:

def buildSqlCondition(field: String,operator: ConditionOperator.Value,value: String ) = {
  val sqlOperator = operator.toSql
  [...]

因此,ConditionOperator.Equal.toSql将返回“=”,而ConditionOperator.NotEqual.toSql将返回“<>”等…

但我不知道如何定义toSql方法,以便每个枚举可以“看到”它自己的值并决定如何将自己转换为sql运算符…

解决方法

这是我在过去对该主题的各种搜索中发现的Scala 2.9.2的示例:

object Progress extends Enumeration {
    type enum = Value

    val READY = new ProgressVal {
      val isActive = false
      def myMethod: Any = { .. }
    }

    val EXECUTE = new ProgressVal {
      val isActive = true
      def myMethod: Any = { .. }
    }

    val COMPLETE = new ProgressVal {
      val isActive = false
      def myMethod: Any = { .. }
    }

    protected abstract class ProgressVal extends Val() {
      val isActive: Boolean
      def myMethod: Any
    }
    implicit def valueToProgress(valu: Value) = valu.asInstanceOf[ProgressVal]
}
type Progress = Progress.enum

>隐含是使其可用的关键.
>类型枚举和类型进度有点多余;我将它们包括在内,将这两个概念作为我发现有用的东西.

为了给予应有的信用,最初的想法来自Sean Ross in a response to a question of which this one is a duplicate.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读