|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Jun 2012
Messaggi: 6
|
[Java] Interfaccia Comparator
Ciao ragazzi.
Mi domandavo: come si può notare dalla documentazione ufficiale l'interfaccia Comparator ha due metodi: 1) compare 2) equals Ma allora, perchè se scrivo una classe che implementa Comparator, il compilatore compila anche se implemento solo il metodo compare senza implementare il metodo equals???? ![]() ![]() ![]() Grazie per le risposte Ciao |
![]() |
![]() |
![]() |
#2 | |
Member
Iscritto dal: Sep 2007
Messaggi: 59
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#3 | |
Junior Member
Iscritto dal: Jun 2012
Messaggi: 6
|
Quote:
Se per vuoto intendi non implementato allora non può essere perchè (in generale) se implemento l'interfaccia devo implementare tutti i suoi metodi a meno di nn dichiarare la classe abstract (non è il mio caso). Se per vuoto intendi una cosa simile: Codice:
public int equals (Object o) { return 0 } ![]() Grazie cmq per la risposta ![]() |
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Jul 2011
Messaggi: 246
|
No, non è così. Se una classe dichiara di implementare una certa interfaccia deve necessariamente implementarne tutti i metodi in maniera esplicita. Il punto è che nel caso del metodo equals() tutti gli oggetti ne hanno già uno che è quello ereditato dalla classe object, superclasse di ogni oggetto quindi il compilatore non si lamenta. In tutti gli altri casi non compilerebbe nemmeno...
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto. CONCLUSO POSITIVAMENTE CON: oldfield |
![]() |
![]() |
![]() |
#5 | |
Junior Member
Iscritto dal: Jun 2012
Messaggi: 6
|
Quote:
Leggendo la documentazione, però, mi par di capire che venga consigliato di riscrivere cmq il metodo in modo che effettui un confronto tra comparatori, ritornando true se i comparatori confrontati fanno la stessa cosa. Ho capito bene? Confermi? Grazie, per la risposta ![]() |
|
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Jul 2011
Messaggi: 246
|
Il metodo equals() ereditato da Object non fa nient'altro che tornare true se i due oggetti comparati sono in realtà lo stesso oggetto, cioè confronta i reference. Nel caso delle tue classi potresti voler fare l'override del metodo in modo da dare la giusta semantica all'operazione, che è quella di "oggetti uguali nello stato" quindi magari vai a confrontare gli attributi dei due oggetti per tornare true (o qualcosa del genere, dipende da cosa devi farci).
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto. CONCLUSO POSITIVAMENTE CON: oldfield |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Sep 2007
Messaggi: 59
|
Uhm perdonatemi, come detto sarà almeno un anno che non tocco niente che assomiglia anche vagamente a java
![]() |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Aggiunge anche che, in taluni casi, la ridefinizione di questo metodo può portare a un miglioramento delle performance permettendo all'applicazione di determinare che due distinti Comparator impongono lo stesso ordine.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:03.