probableprime metodos library isprobableprime java generics syntax comparable

java - metodos - isprobableprime biginteger



¿Qué significan<y> como implementa Comparable<BigInteger>? (2)

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

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

Este es solo un ejemplo para ayudarme a preguntar acerca de <y>. Lo que realmente me pregunto es sobre el <y> material.

Mi pregunta es triple: ¿qué significa la parte <BigInteger> de la declaración de los instrumentos, cómo se llama esa sintaxis y qué hace?

PD: es realmente difícil buscar <y> e imposible buscar SO <y> en primer lugar.

¡Gracias!


Lea el tutorial de genéricos de Java . La cosa 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 los 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 El T es un parámetro de tipo que se "completa" cuando se utiliza la interfaz. Por lo tanto, en este caso, declarar que implementa Comparable<BigInteger> implica que debe tener un compareTo(BigInteger o) . Otra clase podría implementar el Comparable<String> lo que significa que tendría que implementar un compareTo(String o) .

Con suerte, puede ver el beneficio del fragmento de arriba. En 1.4, la firma de compareTo solo podía tomar un Object dado que todos los tipos de clases implementaban Comparable y no había forma de saber exactamente qué 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 de comparación más específico que solo tome esa clase como parámetro.

Los beneficios aquí son dobles. En primer lugar, no es necesario que realice una instanceof verificación y conversión 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 un String en algo que implemente Comparable<BigInteger> , ya que los tipos no coinciden. Es mucho mejor para el compilador poder indicarle esto, en lugar de hacer que esto cause una excepción de tiempo de ejecución como generalmente hubiera sucedido en un código no genérico.