PDA

View Full Version : [Java] Classi generiche


zanardi84
06-04-2012, 16:13
Salve a tutti. Ho sviluppato per esercizio una classe partendo dall'oggetto istanziato da una classe generica, come nel listato che sto per postare.
Non riesco a capire perchè eclipse mi restituisce un errore di compilazione nel metodo compareTo: - This method must return a result of type int
- implements
java.lang.Comparable<Istante>.compareTo

public class Istante implements Comparable<Istante>
{
// variabile di istanza
private Coppia<Data, Orario> istante;

// costruttore
public Istante(Data d, Orario o)
{
istante = new Coppia<Data, Orario>(d, o);
}

// campi dell'oggetto a destra nella coppia
public int getOra()
{
return istante.getDestro().getOre();
}

public int getMinuti()
{
return istante.getDestro().getMinuti();
}

// campi dell'oggetto a sinistra nella coppia
public int getGiorno()
{
return istante.getSinistro().getGiorno();
}

public int getMese()
{
return istante.getSinistro().getMese();
}

public int getAnno()
{
return istante.getSinistro().getAnno();
}


public Orario getOrario()
{
return istante.getDestro();
}

public Data getData()
{
return istante.getSinistro();
}

public String toString()
{
return istante.toString();
}

public boolean equals (Istante altro)
{
if(this.getData().equals(altro.getData())&& this.getOrario().equals(altro.getOrario()))
return true;
else
return false;
}


public int compareTo(Istante altro)
{
if(this.getData().isMaggiore(altro.getData()))
return 1;
if(this.getData().isMinore(altro.getData()))
return -1;
if(this.getData().equals(altro.getData()))
{
if(this.getOrario().isMaggiore(altro.getOrario()))
return 1;
if(this.getOrario().isMinore(altro.getOrario()))
return -1;
}
else
return 0;


}

}

Secondo voi il codice è corretto o si può creare in modo diverso partendo dall'istanza della classe Coppia?
Grazie.
Grazie.

banryu79
06-04-2012, 16:37
...
public int compareTo(Istante altro)
{
if(this.getData().isMaggiore(altro.getData()))
return 1;
if(this.getData().isMinore(altro.getData()))
return -1;
if(this.getData().equals(altro.getData()))
{
if(this.getOrario().isMaggiore(altro.getOrario()))
return 1;
if(this.getOrario().isMinore(altro.getOrario()))
return -1;
}
else
return 0;


}

}

Il compilatore si lamenta perchè c'è un flusso d'esecuzione che non termina con la restituzione di un int; in particolare quando la condizione in grassetto è verificata mentre le due in marroncino non lo sono. Devi prevedere il caso e restituire l'intero (immagino zero).

zanardi84
09-04-2012, 13:35
Il compilatore si lamenta perchè c'è un flusso d'esecuzione che non termina con la restituzione di un int; in particolare quando la condizione in grassetto è verificata mentre le due in marroncino non lo sono. Devi prevedere il caso e restituire l'intero (immagino zero).

Vero! Mi ero dimenticato che esiste anche "l'else implicito"!
Il codice come ti sembra?