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 :

getClass().getSimplename() renvoie chaine vide


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Par défaut getClass().getSimplename() renvoie chaine vide
    Hello,

    petit post pour un tout petit probleme :
    J'ai une classe Level :

    class Level {
    ....
    Vector<Ground> grounds;
    ...
    }
    lorsque je parcours la liste de ground comme suit:

    for(Object element: level.grounds) {
    Sytem.out.println("class Name : " + element.getClass().getSimpleName());
    }
    j'obtiens une chaine vide.

    Si je remplace getSimpleName par getName, j'obtiens :

    game.scene.Level$5

    est ce que c'est normal ? iln'y a pourtant aucune ambiguité, je devrais voir s'afficher : Ground

    Merci d'avance pour vos explications.

  2. #2
    Membre expérimenté Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Par défaut
    Salut,

    D'après le résultat de getName que te donne, "game.scene.Level$5".
    et d'après la doc sur getSimpleName :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ... Returns an empty string if the underlying class is anonymous...
    Ta classe Ground serait une classe anonyme, mais c'est pas le cas puisque tu as utilisé le nom Ground pour l'utiliser .

    Puisque ton vector est typé "Vector<Ground> grounds;".
    Peux tu essayer avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(Ground element: level.grounds) {
    Sytem.out.println("class Name : " + element.getClass().getSimpleName());
    }

  3. #3
    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,

    @DarkMolo : Tu as bien trouvé la bonne raison : il s'agit d'une classe anonyme. On voit bien cela via le $* dans le nom complet de la classe : game.scene.Level$5

    Le nom d'une classe anonyme correspond au nom de sa classe conteneur suivi de $ + un numéro unique géré par le compilateur.


    Par contre le fait de typer la boucle ne changera rien du tout à son type réel...


    @SQUAL :
    Quel est l'intérêt de tout cela en fait ?
    Et il y a une raison pour que tu utilises un Vector à la place d'une List/ArrayList ?


    a++

  4. #4
    Membre très actif
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Par défaut
    Oui bien vu,

    les instance de Ground que je crée et que j'ajoute au Vector grounds sont bien anonymes. Par contre, comme la déclaration est typée, je ne vois pas trop pourquoi il n'arriverait pas à me retourner le bon nom de classe. Sinon, y a t-il un autre moyen ?

    L'interet est que j'essaie de "serialiser" une classe java dans une chaine contenant les instructions d'initialisations du Level.

    Pour l'utilisation de Vector, il me semble qu'il est synchrone, c'est pour enlever des élements de "grounds" à la volée.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par SQUAL Voir le message
    les instance de Ground que je crée et que j'ajoute au Vector grounds sont bien anonymes. Par contre, comme la déclaration est typée, je ne vois pas trop pourquoi il n'arriverait pas à me retourner le bon nom de classe.
    Parce que, selon le sens même de "anonyme," la classe en question n'a pas de nom et qu'il n'y a pas de "bon nom" à renvoyer. Renvoyer une chaîne vide à la place semble être un comportement correct.

    Sinon, y a t-il un autre moyen ?

    L'interet est que j'essaie de "serialiser" une classe java dans une chaine contenant les instructions d'initialisations du Level.
    Utiliser une classe imbriquée qui ne soit pas anonyme.

    Citation Envoyé par SQUAL Voir le message
    Pour l'utilisation de Vector, il me semble qu'il est synchrone, c'est pour enlever des élements de "grounds" à la volée.
    Ok.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre très actif
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Par défaut
    Merci Thelvin pour ta réponse.
    Mais quand tu dis :

    Parce que, selon le sens même de "anonyme," la classe en question n'a pas de nom et qu'il n'y a pas de "bon nom" à renvoyer. Renvoyer une chaîne vide à la place semble être un comportement correct.
    Je suis d'accord que quand tu écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    grounds.add(new Ground() {
            Object nouveauChamp;
     
            Object nouvelleMethode() {
     
            }
    });
    ce n'est plus vraiment une instance de ground, puisqu'on y ajoute un nouveau comportement.
    Toutefois, je me serais attendu à ce que getClass().getSimpleName() me renvoie au moins le nom de la classe qu'on "étend".

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/11/2014, 19h39
  2. Création de table - chaine vide
    Par christellel198 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 20/10/2005, 15h18
  3. copie de string donne une chaine vide
    Par zmatz dans le forum SL & STL
    Réponses: 5
    Dernier message: 15/10/2005, 15h31
  4. [bioinfo] fonction qui renvoie chaîne à autre fonction
    Par perlaud dans le forum Bioinformatique
    Réponses: 11
    Dernier message: 16/07/2004, 15h06
  5. [BDD] renvoyer une chaine vide au lieu de null
    Par cmoulin dans le forum JDBC
    Réponses: 6
    Dernier message: 06/05/2004, 11h38

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