next up previous contents index
Next: Itérations Up: Les relations d'ordre Previous: Les relations d'ordre

    
Implémentations anonymes

L'utilisation de l'interface Comparator serait lourde si l'on devait définir une classe d'implémentation pour chaque méthode de comparaison ; ceci peut être évité, car Java permet d'instancier des classes anonymes :

class Test {
  
  public static void main(String[] args) {
    List l = new ArrayList(...);
    Comparator prénomComparator = new Comparator() {
      public int compare(Object o1, Object o2) {
        Nom r1 = (Nom) o1;
        Nom r2 = (Nom) o2;
        int prénomComp = r1.valPrénom().compareTo(r2.valPrénom());
        if (prénomComp != 0) 
          return prénomComp;
        else
          return r1.valNom().compareTo(r2.valNom());
      }
    };

    Collections.sort(l, prénomComparator);
    System.out.println(l);
  }
}

L'expression new Comparator() { ... }, qui utilise le nom de l'interface, permet à la fois de créer une instance et d'implémenter la méthode compare(). Cette expression pourrait apparaître directement dans l'invocation de sort(), bien que ce ne soit plus très lisible, ce qui évite de définir la variable de classe prénomComparator :

    Collections.sort(l, new Comparator() { ... });



R. Lalement
2000-10-23