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
-
Quel est le profil de la méthode min ?
-
Comment faire pour que l'appel min() sans argument
soit invalide ?
-
É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.
-
É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
-
É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.
-
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.
-
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
-
Qu'elle est la signature de la méthode min ?
-
Ecrire le code correspondant
Exercice 5 - Carte sauvage
-
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 ?
-
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.
Rémi Forax - Université de Marne La Vallée