Pregunta

Veo código como este

class A implements Comparable<A> {


}

¿Qué significa esto, cuáles son las ventajas y desventajas?

¿Fue útil?

Solución

Significa que la clase se compromete a responder a los métodos definidos por el "interfaz" Comparable.

La ventaja que tiene con esta (y cualquier otra declaración de "implementación") que pueda "resumen"El tipo de objeto y código a la interfaz en su lugar.

Considera esto

class A implements Comparable {
    .... 
}

class B implements Comparable {
    .... 
}


class C implements Comparable {
    .... 
}

Entonces puede codificar algo que pueda usar Comparable En lugar de un tipo específico:

public void doSomethingWith( Comparable c ) {

       c.compareTo( other ); // something else...

}

E invoquelo como:

  doSomethingWith( new A() );

  doSomethingWith( new B() );

  doSomethingWith( new C() );

Debido a que realmente no le importa cuál es el tipo de clase, solo le importa que implementa la interfaz.

Este (programa para la interfaz en lugar de la implementación) es una de las técnicas más poderosas en el mundo de la programación OO, porque promueve bajo acoplamiento.

Otros consejos

Implementar una interfaz comparable significa que se puede comparar con otras instancias de A.

Muchas operaciones en Java que implican la clasificación del uso de los métodos definidos en la interfaz comparable para determinar si las instancias de A son mayores que menos o iguales a otras instancias.

Al implementar estos métodos, puede usar muchas características útiles, como Java Sort, usar instancias de A como claves para árboles binarios y más.

Significa que la clase A se puede ordenar utilizando el método comparable comparable:

A a1 = new A(1);
A a2 = new A(3);

// -1, 0, or 1 depending on whether a2 is less than, equal to, or greater than a1
int order = a1.compareTo(a2);

Comparable utiliza el pedido natural para su clase.

Otro camino a seguir ya que Java 5 es Comparador. Puede pasar este objeto y tener más de una forma de comparar y ordenar la clase de destino. Por ejemplo, a veces es posible que desee ordenar una clase de nombre por nombre, otras veces por apellido. Comparable solo le da una forma de hacerlo, pero puede tener varias instancias comparadoras.

Significa que la clase es una que puede operarse mediante funciones que esperan que sus argumentos sean objetos que se pueden comparar con otros objetos del mismo tipo (como la funcionalidad de clasificación predefinida para las listas).

Implementar la interfaz comparable significa que la clase admite ciertas funciones que requiere la interfaz (específicamente, el compareTo() Método), que las operaciones de clasificación (u otras) que se realizan en la clase utilizarán para hacer su trabajo sin tener que preocuparse por el resto de la clase.

Para más detalles:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/comparable.html

Además de lo que todos los demás dijeron, al implementar una interfaz (o extender una clase), obtiene la aplicación del compilador del contrato del supertipo. En el caso de 'comparable', eso significa que obtiene un error del compilador si no implementa el método 'int Compareto (a ANA)' en la clase de implementación. Agregar la anotación '@Override' al método de implementación proporciona aún más seguridad en tiempo de compilación; Si no implementa el método con la firma correcta, el compilador le dirá. Los errores de tiempo de compilación son mucho, mucho más fáciles y más baratos de solucionar que los errores de tiempo de ejecución. Además, la implementación de una interfaz permite que cualquier instancia de una clase de implementación sea tratada como el tipo de interfaz para los métodos (y constructores) que toman el tipo de interfaz como argumento o parámetro genérico. Por ejemplo, el método 'java.util.collections.max (colección coll)' toma una colección cuyo tipo base debe extenderse 'comparable'.
http://download.oracle.com/javase/7/docs/api/java/util/collections.html#max(java.util.collection)

Significa que los objetos de esta clase se pueden clasificar fácilmente en colecciones porque se pueden comparar entre sí. La otra opción es implementar un comparador que sea una clase responsable de clasificar otras clases. Lo comparable pone la lógica de clasificación directamente en la clase a ordenar; El comparador coloca la lógica de clasificación en una clase diferente.

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