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

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

(编辑:李大同)

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

    推荐文章
      热点阅读