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

avec Java Discussion :

Null object reference


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Par défaut Null object reference
    Une des plaies de la programmation objet est l'erreur trop souvent rencontrée Null object reference.

    Il est élégant d'écrire une instruction comme objA.objB.methode ... qui plante si la référence objB n'est pas instanciée. On peut toujours vérifier avant l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (objA != null && objA.objB != null) 
       objA.objB.methode
    mais c'est déjà beaucoup moins élégant

    C'est plus objet mais pas plus beau avec un try catch.

    Avez vous un pattern sympa pour solutionner ce problème ?

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Kio,
    Citation Envoyé par elisfr Voir le message
    Avez vous un pattern sympa pour solutionner ce problème ?
    Oui, elle est même très simple :

    - coder proprement

    - et pour cela, entre autres, toujours vérifier la validité des pointeurs (ce qui implique de les mettre à NULL quand on libère).


  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Par défaut
    C'est justement le sens de ma question. : comment tester proprement la validité d'une référence (pointeur n'est pas le terme le plus approprié) ?

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Kio,

    Je ne vois pas ce que tu veux dire par "comment tester proprement la validité".

    Il faut comparer à la valeur indiquant l'invalidité NULL, c'est tout.

    Maintenant, si, comme tu en parles dans ton premier post, tu penses qu'ajouter des tests dans ton programme n'est pas "élégant", eh bien, il faudra que tu sois moins élégant.

    (A moins que tu trouves comment faire un test sans en faire... )

  5. #5
    Membre expérimenté Avatar de welcome_59
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 203
    Par défaut
    comment tester proprement la validité d'une référence
    Réponse dans la spécification de la technologie et l'API que tu utilises, et souvent ça donne "==", "equals()" ou autre selon les cas; ça dépend aussi en grande partie de l'application que tu codes.

  6. #6
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Si tu dois vérifier qu'une référence n'est pas nulle avant chaque manipulation d'objet, soit 90% des instructions, tu n'est pas couché. Il n'y a pas de solution à cela. Tout réside dans la vigilance du programmeur.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  7. #7
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Citation Envoyé par elisfr Voir le message
    Il est élégant d'écrire une instruction comme objA.objB.methode ... qui plante si la référence objB n'est pas instanciée.

    Avez vous un pattern sympa pour solutionner ce problème ?
    C'est dans l'idée du pattern "Null Object" : http://en.wikipedia.org/wiki/Null_Object_pattern
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 24/10/2012, 23h37
  2. Réponses: 2
    Dernier message: 11/12/2006, 09h31
  3. Réponses: 1
    Dernier message: 20/04/2006, 12h09
  4. [C#][debutant]erreur => object reference is required for a no
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 3
    Dernier message: 25/01/2006, 13h47
  5. [C#][.net2] NULL Object reference lors de l'accès à un DGV
    Par VincenzoR dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/01/2006, 02h00

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