Domanda

Vedo codice come questo

class A implements Comparable<A> {


}

Che cosa significa questo, quali sono i vantaggi e gli svantaggi di esso?

È stato utile?

Soluzione

E 'significa che la classe si impegna a rispondere ai metodi definiti dal " interfaccia " paragonabile .

Il vantaggio che hai con questo (e qualsiasi altra dichiarazione "attrezzi"), in modo che si può " astratto " il tipo di oggetto e codice all'interfaccia invece.

Si consideri questo

class A implements Comparable {
    .... 
}

class B implements Comparable {
    .... 
}


class C implements Comparable {
    .... 
}

È quindi possibile codificare qualcosa che può utilizzare Paragonabile invece di un tipo specifico:

public void doSomethingWith( Comparable c ) {

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

}

E invocano le cose come:

  doSomethingWith( new A() );

  doSomethingWith( new B() );

  doSomethingWith( new C() );

Perché non ti interessa davvero quello che il tipo di classe è, basta cura lo fa implementare l'interfaccia.

Questa (programma per l'interfaccia piuttosto per l'implementazione) è una delle tecniche più potenti nel mondo della programmazione OO, perché promuove basso accoppiamento .

Altri suggerimenti

Implementare un'interfaccia paragonabile significa che A può essere confrontato con altre istanze di A.

Molte operazioni in java che coinvolgono classificare utilizzare i metodi definiti nell'interfaccia paragonabile per determinare se le istanze di A sono maggiore di minore o uguale agli altri casi.

Con l'implementazione di questi metodi si è in grado di usare un sacco di funzioni utili come Java sorta, utilizzare le istanze di A come chiavi per alberi binari, e altro ancora.

Ciò significa che la classe A può essere ordinata con il metodo compareTo 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);

Paragonabile utilizza l'ordinamento naturale per la classe.

Un altro modo per andare dal momento che Java 5 è comparatore . È possibile passare questo oggetto in giro e avere più di un modo per confrontare e ordinare la classe di destinazione. Ad esempio, a volte si potrebbe voler ordinare una classe di nome per nome, altre volte per cognome. Paragonabile ti dà solo un modo per farlo, ma si può avere diverse istanze di confronto.

Ciò significa che la classe è uno che può essere operato da funzioni che prevedono loro argomenti siano oggetti che possono essere comparati con altri oggetti dello stesso tipo (ad esempio la funzionalità di ordinamento predefinito per gli elenchi).

L'implementazione dell'interfaccia Comparable significa che la classe supporta alcune funzioni che l'interfaccia richiede (in particolare, il metodo compareTo()), che l'ordinamento (o altro) operazioni che vengono effettuate sulla classe utilizzeranno per fare il loro lavoro senza dover preoccuparsi il resto della classe.

Per maggiori informazioni: http://java.sun.com/ J2SE / 1.4.2 / docs / api / java / lang / Comparable.html

In aggiunta a ciò che chiunque altro ha detto, implementando un'interfaccia (o l'estensione di una classe), si ottiene compilatore esecuzione del contratto del supertipo. Nel caso di 'comparabile', che significa che si ottiene un errore di compilazione, se non si riesce ad attuare il 'int compareTo (A Ana)' metodo nella classe che implementa. Aggiungendo l'annotazione '@Override' al metodo di applicazione prevede ancora più sicurezza in fase di compilazione; se non si riesce a implementare il metodo con la firma destra il compilatore vi dirà. In fase di compilazione errori sono molto, molto più facile e meno costoso da risolvere rispetto runtime di errori. Inoltre, l'attuazione di un interfaccia permette qualsiasi istanza di una classe di attuazione devono essere trattati come il tipo di interfaccia per i metodi (e costruttori) che prendono il tipo di interfaccia come argomento o parametro generico. Ad esempio, il metodo 'java.util.Collections.max (Collection coll)' prende un insieme cui tipo base deve estendersi 'comparabile'.
http: // download.oracle.com/javase/7/docs/api/java/util/Collections.html#max(java.util.Collection)

Ciò significa che gli oggetti di questa classe possono essere facilmente ordinati in collezioni perché possono essere confrontate tra di loro. L'altra opzione è quella di implementare un comparatore che è una classe responsabile per l'ordinamento altre classi. Il Paragonabile mette la logica di smistamento direttamente nella classe da ordinare; il comparatore mette la logica di ordinamento in una classe diversa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top