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 :

newinstance A$B probleme


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 93
    Par défaut newinstance A$B probleme
    bonjour,

    voila j'ai un petit probleme. J'ai une class

    class A{
    public a(){}
    class B
    public B(){}
    }

    lorsque je fait un Class.forName("A$B") ma classe A$B est bien trouvé.

    Par contre lorsque j'essaye d'insancier la Class A$B j'ai une erreur

    "Exception: java.lang.InstantiationException: A$B

    par contre si je defini ma classe B a l'exterieur de la classe A je n'ais aucun probleme d'instantiation.

    Est 'il possible d'instancier A$B

    Merci d'avance

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,



    Ton problème est tout à fait normal puisqu'une la classe B est lié à une instance de la classe A. En fait le compilateur ajoute automatiquement un paramètre de type A au contructeur de B, ce que tu peux vérifier via la reflection via getConstructors()...

    Les classes internes ne sont pas vraiment adapté à la réflection du fait des liens qu'elles entretiennent avec leurs classes parent...


    Mais si ta classe B n'a pas a être lié à une instance précise de A, alors tu dois utiliser une "static nested classes", c'est à dire une classe interne static :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class A {
    	public A() {
    	}
     
    	static class B {
    		public B() {
    		}
    	}
    }
    La classe B continuera a avoir accès aux informations du type A, mais ne sera plus lié à une instance en particulier

    Plus d'info :
    Quels sont les différents types de classes internes (nested classes) ?

    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 93
    Par défaut
    merci adiGuba,

    cela fonction bien lorsque la classe B est defini comme static.

    Par contre je n'ais pas trop bien compris :

    "La classe B continuera a avoir accès aux informations du type A, mais ne sera plus lié à une instance en particulier"

    Cela veut dire que je n'aurais pas a definir A.B pour acceder a B et que je pourrais tout simplement appeller B.

    Dansle cas ou j'ai A1$B11 A1$B12 A1$B13 et A2$B21 A2$B22 A2$B23. En appelant B22 par example j'accederais au info A2 et en appellent B11 aux infos A1.

    ou A1 et A2 sont deux instance de A et ou B11 appartient a A1 et B21 appartient a A2.

    merci pour le coup de main.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 93
    Par défaut
    Salut adiGuba,

    En fait si je met B en STATIC je ne paux plus acceder au data de A. Je viens de faire la test a moins de preciser sur qu'elle A je veux pointer.

    donc pour une structure A1$B11 A1$B12 je ne peut pas mettre B en static si je veux utiliser A1.B11 et A1.B12.

    si je veux mettre B11 en static est acceder a A1. Il faut donc que je precise dans quelle instance A je veux recuperer l'info ?

    En tous ca merci pour l'info

  5. #5
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hterrolle Voir le message
    En fait si je met B en STATIC je ne paux plus acceder au data de A. Je viens de faire la test a moins de preciser sur qu'elle A je veux pointer.
    C'est exactement ce que je voulais dire par "ne sera plus lié à une instance en particulier".


    Sinon il faut passer au constructeur l'instance de A avec lequel ton objet B est lié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    A a= new A();
    Class bType = Class.forName("A$B");
    bType.getConstructor(A.class).newInstance(a);
    Mais ce n'est pas forcément simple à gérer...

    a++

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 93
    Par défaut
    merci beaucoup adiGuba,

    Je pense que l'on a fait la tour de la question. C'est vrai que la drenière solution n'est pas la plus simple mais si je n'est pas d'autre choix je vais bien trouver un moyen de simplifier tout cela

    A+ et encore merci

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

Discussions similaires

  1. [Reflection] Probleme d'appel newInstance()
    Par SEMPERE Benjamin dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 17/06/2004, 13h15
  2. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  3. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01
  4. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

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