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

Java Discussion :

Attributs à null bien qu'initialisés


Sujet :

Java

  1. #1
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut Attributs à null bien qu'initialisés
    Bonjour à tous,
    je me pose une question... j'ai le cas suivant :
    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
    public class DateTextCellEditor extends CellEditor {
    	/** composant calendar */
    	private CalendarCombo calendar = null;
    	//private CalendarCombo calendar; /* ça fonctionne sans l'initialisation */
    
    	public DateTextCellEditor(final Composite composite) {
    		super(composite); // appelle createControl
                    // initialise les attributs (calendar ici)
    	}
    
    	@Override
    	protected Control createControl(final Composite parent) {
    		calendar = (calendar == null ? calendar = new CalendarCombo(parent, SWT.NONE) : calendar);
    		return calendar;
    	}
    
    //........
    }
    Ma classe étend CellEditor qui contient une méthode abstraite createControl.
    Le problème est que cette méthode est appelée quand je fais le super(composite) ... donc mon attribut calendar est intialisé, puis après le super les attributs de la classe sont réinitialisés ! donc calendar revient à null...
    Tout fonctionne en n'initialisant pas l'attribut à null, mais ce comportement me semble étrange... bug peut être ? les attributs ne devraient ils pas être initialisés avant l'appel à super() pour éviter ce genre de pb ?...

    Merci d'avance,
    jojodu31

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jojodu31 Voir le message
    ...
    les attributs ne devraient ils pas être initialisés avant l'appel à super() pour éviter ce genre de pb ?...
    Ben non, il faut d'abord faire super() (implicite) pour créer les propriétés définies dans la classe parent et ensuite initialiser les propriétés de la classe en cours.

    Peut-on voir la classe dérivée ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    l'odre des appels dans un constructeur est:
    1) appel du super constructeur
    2) appel des initialisations d'instances
    3) appel du code du constructeur

    si un constructeur de la super-classe invoque une méthode d'instance :
    - il faudrait qu'elle soit private ou final
    - sinon effets de bord zarbi

    ici le super constructeur appelle d'abord ta méthode
    ensuite l'initialisation d'instance à null se fait
    donc normal .... et à éviter absolument!

  4. #4
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    @OButterlin:
    la classe dérivée est CellEditor de JFace.

    @professeur shadoko
    si un constructeur de la super-classe invoque une méthode d'instance :
    - il faudrait qu'elle soit private ou final
    - sinon effets de bord zarbi
    donc normal .... et à éviter absolument!
    Je suis bien d'accord, et c'est d'autant plus inquétant que c est classe fait partie de l'api JFace ...

Discussions similaires

  1. [EJB Stateless] EJB Distant reçoit Objet avec Attributs à "null"
    Par VincentG.Me dans le forum Java EE
    Réponses: 2
    Dernier message: 11/11/2011, 19h11
  2. [Framework] Pourquoi mon attribut=null
    Par daydream123 dans le forum Spring
    Réponses: 6
    Dernier message: 19/09/2011, 21h49
  3. valuetype et attributs null
    Par volcon dans le forum CORBA
    Réponses: 2
    Dernier message: 08/06/2010, 10h00
  4. attribut null dans user control
    Par salihovic dans le forum Windows Forms
    Réponses: 3
    Dernier message: 05/01/2010, 18h12
  5. Problème d'attribut "null"
    Par baallrog dans le forum Outils
    Réponses: 6
    Dernier message: 10/01/2007, 12h08

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