Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Programmazione JAVA

Hybrid View

  1. #1
    Mhm interessante, mi diresti perchè ti turba l'implementazione del comparator nella classe Veicolo ? A me onestamente pare sensata, ma è giusto conoscere più punti di vista.
    Per quanto riguarda l'aver allegato "la soluzione", ho preferito farlo solo perchè il codice era già fatto. La mia è stata solo una variante per uno stesso problema.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da SkyBlue Visualizza il messaggio
    mi diresti perchè ti turba l'implementazione del comparator nella classe Veicolo ?
    A me onestamente pare sensata
    No, non è sensata.

    In Java la comparazione degli oggetti è stata affrontata tramite l'utilizzo di due interfacce distinte: Comparable e Comparator.

    Comparable va implementato nella classe degli oggetti da comparare. Se hai una classe es. Persona, questa può implementare

    public class Persona implements Comparable<Persona>

    Essendo nella classe degli oggetti da comparare, la implementazione di Comparable è UNA sola, non ce ne possono essere ovviamente di più (una interfaccia si implementa una volta sola in un oggetto). Il criterio di ordinamento è quindi solo uno e come dice la documentazione, dovrebbe (in teoria) essere l'ordinamento che è più "naturale" per quella classe di oggetti (ma poi dipende dal concetto della classe, ovviamente). Nel caso di un Persona, l'ordinamento naturale più ovvio e comune è per cognome/nome.

    Il compareTo di Comparable DEVE usare lo "stato" dell'oggetto, perché la comparazione è tra l'oggetto this e un altro oggetto (in argomento al metodo).


    Comparator invece va implementato in classi DISTINTE da quella degli oggetti da comparare. Essendo in classi distinte, se ne possono avere quante ne vuoi e quindi ottenere N criteri "extra" di ordinamento.

    public class AnnoNascitaDecrescenteComparator implements Comparator<Persona>
    public class NomeEAnnoNascitaComparator implements Comparator<Persona>
    ecc....

    Il compare di Comparator riceve i 2 oggetti da comparare, NON ha senso che sia implementato nella classe degli oggetti, perché non userebbe lo "stato" dell'oggetto su cui compare viene invocato! E infatti nel tuo caso hai dovuto passare un nuovo Veicolo fittizio al sort che però concettualmente non servirebbe a un piffero.


    Questo è quanto va studiato. Stop.
    Ultima modifica di andbin; 18-08-2017 a 18:08
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.