Io vedrei bene anche una class Mese fatta in modo diverso.
All'utente interessa solo e soltanto il "nome" del mese e gli interessa che essi vengano ordinati secondo l'usuale ordine cronologico.
Quindi, ridurrei il costruttore al solo nome del mese e manterrei completamnte nascosto all'interno il meccanismo di ordinamento (a livello di classe). E farei di più: farei in modo che i mesi possano "auto-ordinarsi", facendo implementare Comparable.
Questo è solo un abbozzo:
codice:
import java.util.*;
public class Mese implements Comparable<Mese> {
private static final HashMap<String,Integer> mesi = new HashMap<String,Integer>();
// Il blocco statico di inizializzazione serve a valorizzare la mappa che mi permetterà
// di effettuare gli ordinamenti.
static {
mesi.put("GENNAIO",0);
mesi.put("FEBBRAIO",1);
mesi.put("MARZO",2);
mesi.put("APRILE",3);
mesi.put("MAGGIO",4);
mesi.put("GIUGNO",5);
mesi.put("LUGLIO",6);
mesi.put("AGOSTO",7);
mesi.put("SETTEMBRE",8);
mesi.put("OTTOBRE",9);
mesi.put("NOVEMBRE",10);
mesi.put("DICEMBRE",11);
}
private String nome;
public Mese(String nome) {
this.nome = nome;
}
@Override
public String toString() { return nome; }
@Override
public int hashCode() { return 17 * nome.toUpperCase().hashCode(); }
@Override
public boolean equals(Object obj) {
boolean ret = false;
if (obj instanceof Mese) {
Mese m = (Mese) obj;
ret = this.nome.toUpperCase().equals(m.nome.toUpperCase());
}
return ret;
}
public int compareTo(Mese obj) {
return mesi.get(nome.toUpperCase()) - mesi.get(obj.nome.toUpperCase());
}
}
Così facendo, non solo lascio all'utente la possibilità di scrivere il nome del mese come gli pare (maiuscolo, minuscolo, con l'iniziale, ecc), ma gli permetto di effettuare velocemente gli ordinamenti:
codice:
List<Mese> lista = new ArrayList<Mese>();
lista.add( new Mese("Luglio") );
lista.add( new Mese("MARZO") );
lista.add( new Mese("maggio") );
// All'ordinamento lasciamo che ci pensi Collections, sfruttando il "natural-order"
// indotto proprio dal nostro Comparable
Collections.sort( lista );
System.out.println( lista );