IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Interdire valeur nulle dans une liste


Sujet :

Langage Java

  1. #1
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut Interdire valeur nulle dans une liste
    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

  2. #2
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    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.

  3. #3
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut
    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

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<String> list = Collections.checkedList(new ArrayList<String>(), String.class);
    Tout ajout d'une valeur null (ou incorrect) provoquera une exception.


    a++

  5. #5
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut
    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 :

    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);
    }
    La sortie sera :


  6. #6
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Points : 380
    Points
    380
    Par défaut
    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);
    	}
     
    	//...
    }

  7. #7
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut
    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

  8. #8
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Tiens c'est bizarre que les méthodes add() et addAll() des "checkedcollection" ne soit pas cohérentes


    a++

  9. #9
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut
    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

  10. #10
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par onlytoine Voir le message
    Bug tu crois ?
    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++

  11. #11
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut
    Bien vu

  12. #12
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Points : 380
    Points
    380
    Par défaut
    Citation Envoyé par onlytoine Voir le message
    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
    Rassure toi je n'ai rien écrit !

    C'est Eclipse qui as tout fait à ma place (sauf le "if ( == null) throw ..." mais là c'est du copie colle).

  13. #13
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Valeur Null dans une liste
    Par goutbouyo dans le forum IHM
    Réponses: 2
    Dernier message: 11/04/2007, 19h48
  2. Réponses: 4
    Dernier message: 05/03/2007, 14h53
  3. Tester qu'une valeur existe dans une "liste"
    Par Oluha dans le forum Langage
    Réponses: 12
    Dernier message: 04/08/2005, 23h01
  4. Comment gérer les valeur Nulles dans une requête ?
    Par sondo dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h02
  5. Affcecter une valeur NULL dans une requete paramétrée
    Par thiouwz2 dans le forum Bases de données
    Réponses: 7
    Dernier message: 05/11/2004, 15h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo