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 :

Assertions.. et constructeur


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut Assertions.. et constructeur
    Salut,

    J'ai une petite question concernant le mot clé assert...

    En fait, je l'utilise pour vérifier que les arguments passés à une méthode sont corrects.
    Par contre, là où ça se complique, c'est dans le constructeur...
    En effet, l'appel à super() ou à this() doit être la première ligne du constructeur... Et bien sûr, les paramètres doivent parfois être vérifiés avant l'appel à super (par exemple, super(monObjet.getQuelqueChose()) n'a pas de sens si monObjet est null - et dans ce cas on aurait un NullPointerException au lieu d'une AssertionError).
    Y'a-t-il un moyen de contourner ce pb?

  2. #2
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Je sèche ("a voté") !

  3. #3
    Membre éprouvé Avatar de Xavinou
    Inscrit en
    Mai 2005
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 135
    Par défaut
    Tu peux construire tes objets dans une méthode statique (et mettre ton constructeur en private), ce qui te permet de faire des traitements/vérifications avant l'appel au constructeur.

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Xavinou
    Tu peux construire tes objets dans une méthode statique (et mettre ton constructeur en private), ce qui te permet de faire des traitements/vérifications avant l'appel au constructeur.
    Ah ouais, pas bête...
    Enfin c'est moyennement pratique...Mais c'est vrai que ça semble être la seule solution...
    Enfin, je ne vais pas mettre un constructeur (Factory) static juste pour un assert...

  5. #5
    Membre éprouvé Avatar de Xavinou
    Inscrit en
    Mai 2005
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 135
    Par défaut
    Utiliser un design pattern moi je trouve ça plutot propre !

    Sinon tu peux appeler une méthode de check dans le constructeur.

    Par exemple, pour appeler un super qui prendrait un Object en paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    MaClasse(Object monObjet) throws Exception {
        super(checkMonObjet(monObjet));
        // ...
    }
     
    static Object checkMonObjet(Object monObjet) throws Exception {
        // tu fais tes check
        return monObjet;
    }

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Xavinou
    Utiliser un design pattern moi je trouve ça plutot propre !

    Sinon tu peux appeler une méthode de check dans le constructeur.

    Par exemple, pour appeler un super qui prendrait un Object en paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    MaClasse(Object monObjet) throws Exception {
        super(checkMonObjet(monObjet));
        // ...
    }
     
    static Object checkMonObjet(Object monObjet) throws Exception {
        // tu fais tes check
        return monObjet;
    }
    Alors ça c génial

    Merci

    Bon, un tout petit défaut encore, c'est que check sera appelé même si les assertions sont inactives, mais bon...

Discussions similaires

  1. [Reflection] Récupérer un constructeur ayant un paramètre int
    Par narmataru dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 09/07/2004, 09h53
  2. [VB6]Déclaration d'un Constructeur Spécialisé
    Par TagadaTsoin dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 26/05/2004, 14h09
  3. [Constructeur]Pb avec la surcharge d un constructeur
    Par cmoulin dans le forum Langage
    Réponses: 3
    Dernier message: 26/04/2004, 09h29
  4. Capture d'exception dans un constructeur
    Par declencher dans le forum Composants VCL
    Réponses: 8
    Dernier message: 03/02/2004, 12h52
  5. pb constructeurs classes dérivant classe abstraite
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2003, 19h02

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