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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |