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

scala – 根据类型类添加有效性检查(可选含义)

发布时间:2020-12-16 19:20:02 所属栏目:安全 来源:网络整理
导读:在 scala中,我们可以使用隐式类型类有条件地将方法添加到依赖于该类型参数的参数化类型上.例如,Iterator.sum: def sum[B : A](implicit num: Numeric[B]): B = foldLeft(num.zero)(num.plus) 必须有一个Numeric类型类的实例才能调用此方法: scala List(1,2
在 scala中,我们可以使用隐式类型类有条件地将方法添加到依赖于该类型参数的参数化类型上.例如,Iterator.sum:

def sum[B >: A](implicit num: Numeric[B]): B = foldLeft(num.zero)(num.plus)

必须有一个Numeric类型类的实例才能调用此方法:

scala> List(1,2,3).sum
res0: Int = 6

scala> List("a","b").sum
<console>:6: error: could not find implicit value for parameter num: Numeric[java.lang.String]
       List("a","b").sum
                  ^

到现在为止还挺好.假设我想要一些集合类型,My2Col:

class My2Col[A](a1 : A,a2 : A)

但我想强制要求,如果这是用A:数字制作的,那么a2> A1.但是,使用非数字的A制作完全有效.

My2Col("a","b") //OK
My2Col("b","a") //OK
My2Col(1,2)     //OK
My2Col(2,1)     //THROW IllegalArgumentException

有没有人想我怎么做这个?

PS.如果有人对更好的问题标题有任何建议,我会全力以赴

解决方法

class My2Col[A](a1 : A,a2 : A)(implicit num: Numeric[A] = null){
  for{check <- Option(num); if(check.gteq(a1,a2))}
     throw new IllegalArgumentException
}

(编辑:李大同)

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

    推荐文章
      热点阅读