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

scala – 混合泛型类型

发布时间:2020-12-16 09:51:05 所属栏目:安全 来源:网络整理
导读:我想在myTest中混合泛型类型 case class CC(i:Int,s:String,s2:String)case class Value[V](value: V)def myTest[F](values: (CC ? Value[F])*) = Unitclass QF[M](x: M) { def eqs(v: M) = Value(x)}implicit def conversion[V](v: V): QF[V] = new QF(v)my
我想在myTest中混合泛型类型

case class CC(i:Int,s:String,s2:String)

case class Value[V](value: V)

def myTest[F](values: (CC ? Value[F])*) = Unit

class QF[M](x: M) {
  def eqs(v: M) = Value(x)
}

implicit def conversion[V](v: V): QF[V] = new QF(v)

myTest(_.i eqs 1)
myTest(_.s eqs "lol")
myTest(_.s eqs "lol",_.s2 eqs "lol2")

它一直工作到那一点,但我想当我尝试做混合类型时,我得到一个协方差错误.

当我做 :

myTest(_.i eqs 1,_.s eqs "lol")

我收到以下错误:

Error:(16,13) type mismatch;
 found   : A$A135.this.CC => A$A135.this.Value[Int]
 required: A$A135.this.CC => A$A135.this.Value[Any]
myTest(_.i eqs 1,_.s eqs "lol");}
           ^

解决方法

对,那是正确的.因为Value在V中定义为不变,这意味着Value [Int]和Value [String]不是Value [Any]的子类型,但Any是最近的Int和String的常见超类型,即myTest中的F .因为V处于协变位置,你可以简单地修改它:

case class Value[+V](value: V)

(编辑:李大同)

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

    推荐文章
      热点阅读