scala中的协变Typeparameter需要在java接口中是不变的
发布时间:2020-12-16 09:12:51 所属栏目:安全 来源:网络整理
导读:我有一个这样的特征(有些更多的信息可以在 this related question by myself找到,虽然我不认为这是需要这个问题) trait Extractor[-A,+B] { def extract(d:A):B //lots of other things} 为了在现有的java框架中使用这个,我希望这个Extractor有一个函数可以
我有一个这样的特征(有些更多的信息可以在
this related question by myself找到,虽然我不认为这是需要这个问题)
trait Extractor[-A,+B] { def extract(d:A):B //lots of other things } 为了在现有的java框架中使用这个,我希望这个Extractor有一个函数可以返回一个比较器[B](为java.util.Comparator)或者更好地扩展比较器[A].现在这是一个问题,因为比较器类型参数应该是不变的,而A是逆变的,B是协方差的. 所以我得到这样的错误: scala> import java.util.Comparator import java.util.Comparator scala> trait Extractor[-A,+B] extends Comparator[A] <console>:6: error: contravariant type A occurs in invariant position in type [-A,+B]java.lang.Object with java.util.Comparator[A] of trait Extractor trait Extractor[-A,+B] extends Comparator[A] ^ scala> trait Extractor[-A,+B] { | def comp:Comparator[B] | } <console>:7: error: covariant type B occurs in invariant position in type => java.util.Comparator[B] of method comp def comp:Comparator[B] ^ 你是否看到任何办法,或者这只是其中一个“在scala伤害中使用java泛型”的情况? 解决方法
在类型边界的帮助下,可以执行以下操作:
scala> trait Extractor[-A,+B] { | def comp:Comparator[_ <: B] | } defined trait Extractor (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |