Quiero tener una interfaz A
parametrizado por T
A<T>
, y también quieren cada clase que lo implementa para poner en práctica también Comparable
(con T
y sus subtipos). Parecería natural escribir interface A<T> extends Comparable<? extends T>
, pero eso no funciona. ¿Cómo debería hacerlo entonces?interfaz Java extiende comparable
Respuesta
Cuando Comparable<? extends T>
parece que significa que tiene una instancia de Comparable
que se puede comparar a un subtipo (desconocido) de T
, no es que se puede comparar con cualquier subtipo de T.
Pero usted don' Necesito eso, porque un Comparable<T>
se puede comparar a cualquier subtipo de T
de todos modos, por ejemplo un Comparable<Number>
se puede comparar con un Comparable<Double>
.
Así que trate de:
interface A<T> extends Comparable<T> {
// ...
}
o
interface A<T extends Comparable<T>> extends Comparable<A<T>> {
// ...
}
dependiendo de si tiene que ser capaz de comparar los casos de T
con el fin de poner en práctica su método compareTo
.
¡Esta es una respuesta increíble! Vine aquí desde http://stackoverflow.com/questions/6290406/generic-method-to-sort-a-map-on-values. Resolvió mi problema –
Si utiliza comparable no es necesario especificar la posibilidad de subtipos en la función de comparación, es posible, por naturaleza, pasar cualquier subtipo de un objeto X a un método que declare un parámetro de la clase X. Consulte la código a continuación para más 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);
}
}
- 1. Java: Comparable vs Comparador
- 2. Java- El significado de <T se extiende Comparable <T>>?
- 3. implementa vs extiende en genéricos en Java
- 4. Java genéricos e Infinity (comparable)
- 5. Enum <? se extiende la interfaz>
- 6. ¿Cómo es que el parámetro de tipo genérico dice "extiende" Comparable no "implementa"?
- 7. Java extiende el ejemplo
- 8. ¿Cómo implementar una función genérica `max (comparable a, comparable b)` en Java?
- 9. argumento de entrada interfaz Java se extiende desde una clase base
- 10. argumento de método se extiende clase implementa la interfaz
- 11. ¿Cómo comprobar si una interfaz se extiende otra en C#?
- 12. Cómo burlarse de una interfaz que se extiende IEnumerable
- 13. clase genérica que se extiende clase y aperos de interfaz
- 14. ¿Por qué Map no extiende la interfaz de Colección
- 15. interfaz Java y la herencia
- 16. regla de Java para extiende e implementa
- 17. java force una clase que se extiende
- 18. La sintaxis <T se extiende Clase <T>> en Java
- 19. ¿Cuál es el rasgo Comparable de Scala?
- 20. Java HashSet está permitiendo engaños; problema con comparable?
- 21. Clase abstracta de Java Implementar una interfaz con genéricos
- 22. Java Generics WildCard: <? extiende Número> vs <T extiende Número>
- 23. C++ determine si la clase es comparable
- 24. Casting a Comparable, luego comparando
- 25. Interfaz IEqualityComparer en Java
- 26. interfaz Java y emisión
- 27. Interfaz API de Java
- 28. Asegúrese de que los objetos implementen Comparable
- 29. Java ORM: Herencia múltiple (interfaz)
- 30. En Java, cuando una interfaz se extiende a otra, ¿por qué se volvería a declarar un método en una subinterfaz?
También me gustaría hacer referencia a Java Generics FAQ (http://www.angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html#FAQ204), el cual le dará más ideas con respecto a 'Comparable'. –