El parámetro de tipo covariante en scala debe ser invariante en la interfaz java

Tengo un rasgo que se ve así (puede encontrar más información enesta pregunta relacionada por mí mismo aunque no lo creo, es necesario para esta pregunta)

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

Para usar esto en un marco java existente, me gustaría estoExtractor para tener una función que devuelve unComparator[B] (siendojava.util.Comparator) o incluso mejor extenderComparator[A]. Ahora eso plantea un problema porqueComparatorEl parámetro de tipo s debe ser invariante, mientras queA es contravariante yB es covariante

Entonces obtengo errores como este:

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]
             ^

¿Ves alguna forma de salir de esto o es solo uno de esos casos en los que "usar los genéricos de Java en scala duele"?

Respuestas a la pregunta(2)

Su respuesta a la pregunta