Generics, varargs, boxing

Exercice 1 - Minimum

On souhaite pouvoir écrire le code suivant :

    System.out.println(min(3,12));  // affiche 3
    System.out.println(min(4,2,3)); // affiche 2
   

  1. Quel est le profil de la méthode min ?
  2. Comment faire pour que l'appel min() sans argument soit invalide ?
  3. Écrire le code correspondant.

Exercice 2 - Pile efface

Toutes les classes écritent lors de cette exercice doivent se trouver dans le paquetage fr.umlv.util.stack.

  1. Écrire la classe fr.umlv.util.stack.FixedStack possèdant les méthodes :
    boolean isEmpty() qui indique si la pile est vide.
    push(Object o) qui empile une valeur
    Object pop() qui dépile une valeur
    On considera la pile comme possèdant une capacité maximale fixée lors de la création de l'objet FixedStack.
    Rappeler ce qu'est une fuite de mémoire (memory leak) dans le cas général puis en Java.
    Vérifier que pop ne crée pas de fuite de mémoire.

Exercice 3 - Pile suite

  1. Écrire une autre classe de pile, fr.umlv.util.stack.LinkedStack, possèdant les méthodes isEmpty, push et pop et utilisant une java.util.LinkedList comme structure de stockage sous-jacente.
  2. Indiquer dans quels cas, il est mieux d'utiliser une FixedStack ou une LinkedStack.
    Comment doit-on faire s'il l'on veut pouvoir dynamiquement choisir entre les deux implantations pour exécuter un même code ?
    Modifier votre code et écrire un main de test.
  3. Générifier l'ensemble des classes crées.

Exercice 4 - Minimum (plus)

On souhaiterait écrire une nouvelle méthode min qui puisse être aussi utilisée avec des chaînes de caractères ou tout autre objet comparable.

    System.out.println(min(3,12));            // affiche 3
    System.out.println(min("trois","douze")); // affiche douze
   

  1. Qu'elle est la signature de la méthode min ?
  2. Ecrire le code correspondant

Exercice 5 - Carte sauvage

  1. Pourquoi le code ci-dessous ne compile-t-il pas ?
         private static void print(List<Object> list) {
           for(Object o:list)
             System.out.println(o);
         }
         public static void main(String[] args) {
           List<String> list=Arrays.asList(args);
           print(list)
         }
        
    Que doit-on changer pour qu'il compile ?
  2. On veut écrire la méthode printLength prenant en paramètre une liste d'objet implantant l'interface CharSequence et affichant la longueur des chaînes de caractères de la liste.