1. Compte tenu de la spécification (une seule fonctionalité assoc), les autres classes n'ont pas besoin de connaître la structure exacte des objets de la classe List. Ainsi nous contrôlons toutes les interactions des autres classes avec la classe List.
  2. La statique avec la dynamique.
      static int assoc(List l, String v) {
        
    if (l == nullthrow new Error (v + "inconnue") ;
        
    return l.assoc(v) ;
      }
  3. La dynamique avec la statique.
      int assoc(String v) {
        
    return assoc(this,v) ;
      }
    Cela semble idiot mais nous dit qu'une méthode dynamique est essentiellement une méthode statique avec un premier argument caché this.

  4. Puisque la liste vide est naturellement représentée par null, il faut choisir une méthode statique.
      static int assoc(List l, String v) {
        
    for ( ; l != null ; l = l.next) {
          
    if (l.var.equals(v)) return l.val ;
        }
        
    throw new Error (v + " inconnue") ;
      }


  5. La méthode assoc termine toujours si la liste ne reboucle pas sur elle-même. Cette propriété est garantie sur les listes sont toutes construites avec le constructeur donné.

  6. Si le champ next n'est pas privé, alors on consruit facilement une liste bouclée ainsi :
      List l = new List("x", 1, null) ;
      l.next = l ;