Bonjour,
Une petite question... J'utilise une liste paramétrée en Java5 ce qui renforce pas mal mon code.
Je voudrais cependant en plus interdire l'insertion de valeur nulle dans ma liste. Comment faire ?
Merci !
Anthony
Bonjour,
Une petite question... J'utilise une liste paramétrée en Java5 ce qui renforce pas mal mon code.
Je voudrais cependant en plus interdire l'insertion de valeur nulle dans ma liste. Comment faire ?
Merci !
Anthony
Bonjour, si c'est une classe que tu as fait toi-même, tu dois avoir une méthode ajouter dans laquelle tu peux tester la valeur.
Si c'est une arrayList, il faut tester la valeur avant d'appeler la méthode add.
Les composants SWING | Les layouts SWING | doc javase 6 | CORBA | XSLT | BDD Derby embarquée
Pensez au bouton une fois le problème résolu
Comment utiliser la fameuse balise CODE ?
Oui je peux toujours écrire ma propre implémentation de List, mais je voulais savoir si ça n'existait pas déjà étant donné que ça fait plusieurs fois que je rencontre ce problème...
Anthony
Salut,
Sinon :
Tout ajout d'une valeur null (ou incorrect) provoquera une exception.
Code : Sélectionner tout - Visualiser dans une fenêtre à part List<String> list = Collections.checkedList(new ArrayList<String>(), String.class);
a++
Coucou,
Merci pour la proposition mais j'avais déjà regarder de ce côté... En effet, le contrat de cette méthode ne garantit pas que "null" est interdit dans la liste.
D'ailleurs, cet exemple fonctionne :
La sortie sera :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 List<String> maListe = Collections.checkedList(new ArrayList<String>(), String.class); List<String> listWithNull = new ArrayList<String>(); listWithNull.add("toto"); listWithNull.add(null); maListe.add(0, "titi"); maListe.addAll(listWithNull); for (String crtStr : maListe) { System.out.println(crtStr); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3titi toto null
Si tu as la curiosité de regarder la classe Collection, tu verra que ça n'est pas si compliqué d'imiter le raisonnement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIterator; public class NonNullList<T> implements List<T> { private List<T> list; public NonNullList(List<T> list) { this.list = list; } @Override public boolean add(T e) { if (e == null) throw new NullPointerException(); return list.add(e); } @Override public void add(int index, T element) { if (element == null) throw new NullPointerException(); list.add(index, element); } @Override public boolean addAll(Collection<? extends T> c) { if (c.contains(null)) throw new NullPointerException(); return list.addAll(c); } @Override public boolean addAll(int index, Collection<? extends T> c) { if (c.contains(null)) throw new NullPointerException(); return list.addAll(index, c); } @Override public T set(int index, T element) { if (element == null) throw new NullPointerException(); return list.set(index, element); } //... }
Merci Grimly, c'est gentil de ta part... mais je ne posais pas la question pour qu'on m'écrive le code mais plutôt pour savoir s'il était possible de le faire en "standard" avec le JDK ou un projet comme Apache Commons.
Si ce n'est pas le cas, je devrais pouvoir écrire la classe sans trop de problème...
Anthony
Tiens c'est bizarre que les méthodes add() et addAll() des "checkedcollection" ne soit pas cohérentes
a++
Oui c'est ce que je me suis dit...
Dans l'implémentation interne, le addAll() n'appelle pas la méthode typeCheck()...
Bug tu crois ?
Anthony
Bugs (car comportement incohérent) + Spec incomplète (dans la javadoc il n'est indiqué nulle part que null est accepté ou refusé)
D'ailleurs le bug est déjà corrigé pour Java 7 : http://bugs.sun.com/bugdatabase/view...bug_id=6409434
a++
Bien vu
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager