Des comptes en banque comparables

           

On va reprendre ici la classe Compte vu précédemment pour faire en sorte que deux comptes en banque soient comparables ; on décide que deux comptes sont égaux s'ils ont le même montant et que l'un est plus grand que l'autre si son montant est strictement plus grand que celui de l'autre.

package banque;
import utilitaires.Comparable;
public class Compte implements Comparable {
private int montant;
private int numero;
private String proprietaire;
... (Le code de l'ancienne classe Compte)

// On compare les comptes selon leurs montants
public int comparerA(Object o) {
Compte autre = (Compte) o;
if (this.montant < autre.montant) return -1;
if (this.montant > autre.montant) return 1;
return 0;
}
}
Remarque : dans le code de la méthode comparerA, il ne faut pas être surpris de l'absence de else ; en effet, si les conditions des if sont vérifiées, la méthode se termine et on ne passe donc pas alors à l'instruction suivante.

Le fichier Compte.java


import utilitaires.Comparable; : il est utile d'utiliser cet import pour utiliser le nom court de l'interface Comparable, puisque cet interface a été mise dans le paquetage de nom utilitaires ; sinon, il faudrait nommer plus bas l'interface par son nom long : utilitaires.Comparable.
public class Compte implements Comparable : on déclare ainsi que la classe Compte implémente l'interface Comparable ; cela entraîne qu'elle dispose des constantes de l'interface (même si, ici, il n'y en a pas) et qu'elle doit définir (on dit aussi implémenter) dans son code la méthode compareTo prototypée dans l'interface Comparable ; c'est ce qui est fait ici.
Compte autre = (Compte) o; : pour comparer les montants des comptes en banque, il est nécessaire d'utiliser l'attribut montant de o ; ceci n'est possible qu'en faisant ce qui s'appelle une conversion de type (ou conversion de classe); on affirme en quelque sorte que o est de type Compte et on met le résultat dans la variable autre définie comme étant de type Compte. Si jamais l'objet reçu en paramètre n'était pas un Compte, on aurait ce qui s'appelle un lancement d'exception, avec un lancement d'une exception de type ClassCastException (voir le chapitre sur les exceptions).

© Irène CharonTélécom ParisTech 2012