Ковариантный параметр типа в Scala должен быть инвариантным в интерфейсе Java

У меня есть черта, которая выглядит следующим образом (дополнительную информацию можно найти наэтот связанный вопрос сам хотя я не думаю, это нужно для этого вопроса)

trait Extractor[-A,+B] {
  def extract(d:A):B
  //lots of other things
}

Чтобы использовать это в существующей среде Java, я хотел бы этоExtractor либо иметь функцию, которая возвращаетComparator[B] (будучиjava.util.Comparator) или даже лучше продлитьComparator[A], Теперь это создает проблему, потому чтоComparatorПараметр типа s должен быть инвариантным, в то время как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]
             ^

Видите ли вы какой-либо выход из этого или это только один из тех случаев, когда «использование java-обобщений в scala вредит»?

Ответы на вопрос(2)

Ваш ответ на вопрос