Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Programmazione JAVA

Visualizzazione discussione

  1. #8
    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, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava 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 © 2025 vBulletin Solutions, Inc. All rights reserved.