Pregunta

En Java 1.4.2 , clase java.math.BigInteger implementa las interfaces Comparable , Serializable .

En Java 1.5.0 , clase java .math.BigInteger implementa interfaces Serializable , Comparable < BigInteger > .

Este es solo un ejemplo para ayudarme a preguntar sobre < y > . Lo que realmente me pregunto es sobre las cosas < y > .

Mi pregunta es triple:

  • ¿Qué significa la parte < BigInteger > de la instrucción implements ?
  • ¿cómo se llama esa sintaxis?
  • y ¿qué hace?

PD: es muy difícil buscar en Google < y > e imposible buscar SO para < y > ; en primer lugar.

¡Gracias!

¿Fue útil?

Solución

Lea el Tutorial genérico de Java . Lo que hay entre los corchetes angulares es un parámetro de tipo: comparable es una clase genérica, y en este caso los corchetes angulares significan que la clase es comparable a otros BigIntegers.

Para un poco más de aclaración en este caso, eche un vistazo a Javadocs para Comparable en 1.5. Tenga en cuenta que se declara como Comparable < T > , y que el método compareTo toma un argumento de tipo T . La T es un parámetro de tipo que se rellena " cuando se usa la interfaz. Por lo tanto, en este caso, declarar que implementa Comparable < BigInteger > implica que debe tener un método compareTo (BigInteger o) . Otra clase podría implementar Comparable < String > , lo que significa que tendría que implementar un método compareTo (String o) .

Espero que pueda ver el beneficio del fragmento anterior. En 1.4, la firma de compareTo solo podía tomar un Object ya que todo tipo de clases implementaba Comparable y no había forma de saber exactamente lo que se necesitaba. Sin embargo, con los genéricos, puede especificar que es comparable con respecto a una clase en particular y luego escribir un método compareTo más específico que solo tome esa clase como parámetro.

Los beneficios aquí son dobles. En primer lugar, no necesita hacer una verificación instanceof y un reparto en la implementación de su método. En segundo lugar, el compilador puede hacer muchas más comprobaciones de tipos en tiempo de compilación: no puede pasar accidentalmente una Cadena a algo que implemente Comparable < BigInteger > , ya que los tipos no coinciden. Es mucho mejor para el compilador poder señalarle esto, en lugar de que esto provoque una excepción de tiempo de ejecución como hubiera sucedido generalmente en un código no genérico.

Otros consejos

Estoy bastante seguro de que son genéricos

http://java.sun.com /j2se/1.5.0/docs/guide/language/generics.html

Le pregunté algo similar (C #) tiene información útil allí ¿Qué significa Method < ClassName > significa?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top