next up previous contents index
suivant: Réalisations anonymes d'une interface monter: Paramètres fonctionnels précédent: Exemple   Table des matières   Index


Comparateur d'objets

L'interface ComparateurDePoints peut être généralisée à tous les types d'objets, en remplaçant Point par Object. En fait, cette généralisation est faite dans le paquet java.util, qui fournit l'interface Comparator :

package java.util;

public interface Comparator {
  public int compare(Object o1, Object o2);
  public boolean equals(Object obj);  // définie dans Object
}

La documentation indique que la méthode compare, appliquée à deux objets 70#70 et 71#71, retourne un entier 138#138, ou 237#237 ou un entier 210#210, selon que 70#70 est plus petit que 71#71, lui est égal ou lui est supérieur ; elle déclenche l'exception ClassCastException si les type des arguments ne permet pas la comparaison.

On peut maintenant définir une fonction min générale :

  static Object min(Object x, Object y, Comparator ordre) {
    return ordre.compare(x,y) <=0 ? x : y;
  }

Revenons sur la comparaison des points, cette fois en réalisant l'interface Comparator :

   class OrdreX implements Comparator {
     public int compare(Object o1, Object o2) {
       Point p1 = (Point) o1;
       Point p2 = (Point) o2;
       int dx = p1.x - p2.x;
       return dx!=0 ? dx : p1.y - p2.y ;
   }

   class OrdreY implements Comparator {
     public int compare(Object o1, Object o2) {
       Point p1 = (Point) o1;
       Point p2 = (Point) o2;
       int dy = p1.y - p2.y;
       return dy!=0 ? dy : p1.x - p2.x ;
   }

On invoquera la fonction min de la façon suivante :

    Comparator ordre = new ordreX();
    Point m = (Point) min(new Point(2, 3), new Point(3, 2), ordre);

Le transtypage (Point) est ici nécessaire, puisque le type de retour de min est Object, si l'on veut affecter la valeur retournée par min à une variable de type Point.


next up previous contents index
suivant: Réalisations anonymes d'une interface monter: Paramètres fonctionnels précédent: Exemple   Table des matières   Index
Rene' LALEMENT 2002-11-07