wildcards type objects node generic example data bounded java generics inheritance interface

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); } }