Convierta la firma Java `sort` con`? super T` a Scala (genéricos)
El problema:
Mirando aesta pregunta sobre la migración de la firma Java
public <A extends Comparable<? super A>> void sort(List<A> list) { }
a Scala, no parece haber una manera de evitar un
illegal cyclic reference involving type T
error si haces una traducción literal como esta.
def compilerFailure[T <: Comparable[_ >: T]](a: Array[T]): T = { }
La solución parece ser hacer esto
def workaround[A <: Comparable[U], U >: A](list: List[A]) { }
que si realiza un viaje de ida y vuelta desde el código de bytes a Java, obtiene esto (que pierde elsuper
parte)
public <T extends Comparable<U>, U> void scalaToJava(List<U> a) { }
Mis preguntas:
Es elscalaToJava
versión equivalente a la siguiente?
public <T extends Comparable<?>> void sort(List<T> a) {
Pensé cuandoU
es ilimitado, bien podría ser?
oObject
¿No? Entonces, si ese es el caso, es el Scalaworkaround
versión equivalente a
def sort[A <: Comparable[_]](list: List[A]) { }
Todos parecen compilarse para mi caso de uso (que consiste en poner diferentes subtipos en una colección y poder ordenarlos).NÓTESE BIEN. Tengo curiosidad acerca de la mecánica y qué causa el error de referencia cíclico y me doy cuenta de que Scala ofrece mejores alternativas en términos de covarianza, etc.Ordering
)