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 :

Précision sur le langage


Sujet :

Langage Java

  1. #1
    Membre confirmé Avatar de fma38
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 119
    Par défaut Précision sur le langage
    Bonjour,

    Je suis en train de créer un framework python pour le bus domotique KNX, et pour cela, je m'insprie très fortement de librairies écrites en java.

    Mais n'ayant jamais étudié le java, j'aurais besoin d'explications sur la syntaxe suivante :

    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
    20
    21
    22
    public class A {
     
        private class B {
     
            private C createC() {
                return new C();
            }
     
            public int toto() {
                return 42;
            }
     
            private class C {
     
                public int toto() {
                    return C.this.toto();  // <<<<<<<<<<<<<<<<<<<<
                }
            }
     
        }
     
    }
    Comment fonctionne le C.this.toto() ? À quoi fait-on référence ?

    Merci d'avance.

    PS : j'ai extrait un exemple simple, et j'espère ne rien avoir oublié d'important qui se rapporte à ce bidule... Si c'est le cas, dites-moi ce que je dois chercher pour que je le rajoute.

  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,

    Citation Envoyé par fma38 Voir le message
    Comment fonctionne le C.this.toto() ? À quoi fait-on référence ?
    Par défaut "this" représente une référence vers l'instance courante.
    Toutefois on peut précéder le "this" par le nom de la classe auquel on fait référence.

    Ainsi dans l'exemple que tu donnes C.this est équivalent à this :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            private class C {
     
                public int toto() {
                    return C.this.toto();  // this.toto();
                }
            }
    Toutefois ce code est incorrect car il va remplir le stacktrace à cause d'une récursion infini...




    Cette syntaxe sert surtout pour les classes imbriqués non-static, qui conserve une référence vers les instances des classes englobante.

    Ainsi dans la classe C, tu pourrais utiliser ces trois syntaxes :
    • C.this.toto() ou this.toto(), pour appeler la méthode toto() de l'instance de C.
    • B.this.toto() pour appeler la méthode toto() de l'instance de B contenant C.
    • A.this.toto() pour appeler la méthode toto() de l'instance de A contenant B et C.


    a++

  3. #3
    Membre confirmé Avatar de fma38
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 119
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Par défaut "this" représente une référence vers l'instance courante.
    Yep, comme en C++... C'est le self du python.

    Toutefois ce code est incorrect car il va remplir le stacktrace à cause d'une récursion infini...
    Au temps pour moi, l'appel est en fait :

    Sinon, effectivement, ça planterait vite !

    Cette syntaxe sert surtout pour les classes imbriqués non-static, qui conserve une référence vers les instances des classes englobante.
    [...]

    B.this.toto() pour appeler la méthode toto() de l'instance de B contenant C.
    Ok, je crois avoir pigé. C'est un peu comme appeler la méthode de la classe parente dans le cas de l'héritage ?

  4. #4
    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 fma38 Voir le message
    Ok, je crois avoir pigé. C'est un peu comme appeler la méthode de la classe parente dans le cas de l'héritage ?
    Un peu oui. Sauf que ce n'est pas une classe parente, mais une classe englobante.


    a++

  5. #5
    Membre confirmé Avatar de fma38
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 119
    Par défaut
    Ok, merci beaucoup pour l'explication !

Discussions similaires

  1. Informations sur les langages/outils de ce forum
    Par Idelways dans le forum Autres langages
    Réponses: 3
    Dernier message: 14/02/2018, 12h08
  2. [Défi n°1] Précision sur le malus "pas d'autre langage"
    Par khayyam90 dans le forum Anciens défis
    Réponses: 2
    Dernier message: 19/02/2010, 19h43
  3. Précisions sur le choix du langage
    Par marven dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 07/09/2008, 06h46
  4. Précision sur Oracle 9iAS r2
    Par Patmane dans le forum Oracle
    Réponses: 9
    Dernier message: 18/03/2007, 04h41
  5. Précision sur les sauvegarde à chaud
    Par alxkid dans le forum Administration
    Réponses: 2
    Dernier message: 09/08/2004, 18h55

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