type - java generics bounded wildcards
La interfaz de Java se extiende Comparable (2)
Quiero tener una interfaz A parametrizada por T A<T> , y también quiero que cada clase que la implementa también implemente Comparable (con T y sus subtipos). Parecería natural escribir la interface A<T> extends Comparable<? extends T> interface A<T> extends Comparable<? extends T> , pero eso no funciona. ¿Cómo debería hacerlo entonces?
Cuando Comparable<? extends T> Comparable<? extends T> aparece, significa que tienes una instancia de Comparable que se puede comparar con un subtipo (desconocido) de T , y no que se pueda comparar con ningún subtipo de T.
Pero no es necesario, porque una Comparable<T> comparable puede compararse con cualquier subtipo de T todos modos, por ejemplo, un Comparable<Number> comparable puede compararse con un Comparable<Double> .
Así que prueba:
interface A<T> extends Comparable<T> {
// ...
}
o
interface A<T extends Comparable<T>> extends Comparable<A<T>> {
// ...
}
dependiendo de si necesita o no poder comparar instancias de T para implementar su método compareTo .
Si usa comparable, no es necesario especificar la posibilidad de subtipos en la función de comparación, por naturaleza es posible pasar cualquier subtipo de un objeto X a un método que declare un parámetro de la clase X. Consulte el código a continuación para obtener más información. información.
public interface Test<T> extends Comparable<T> {
}
class TestImpl implements Test<Number> {
@Override
public int compareTo(final Number other) {
return other.intValue() - 128;
}
}
class TestMain {
public static void main(final String[] args) {
TestImpl testImpl = new TestImpl();
testImpl.compareTo(Integer.MIN_VALUE);
}
}