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

Groovy Java Discussion :

Fonctionnement des access modifiers


Sujet :

Groovy Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Fonctionnement des access modifiers
    Salut à tous.

    Je suis en pleine phase d'initiation à Groovy, et je tente actuellement de comprendre la logique derrière la gestion des beans...

    Tout champs déclaré sans acces modifier étant considéré par Groovy comme "propriété" (les getter et setter correspondant sont générés implicitement), je tente simplement de verrouiller l'accès à un champs de ma classe.

    J'ai donc la classe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Task {
     
        private String name;
     
        private String getName() {
            println "getName()"
            return name;
        }
    }
    A priori le champs "name" devrait donc être innacessible...

    Je teste de la manière suivante (dans une classe "main" séparée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Task task1 = new Task(name: "tester")
    print task1.name
    Pensant avoir verrouillé l'accès au champs "name", je pense recevoir une erreur à la 2e ligne.
    L'accès au champs s'effectue pourtant sans problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    getName()
    My task
    Quelqu'un peut-il éclairer ma lanterne ???

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    l'accès à l'attribut de ta classe se fait via le getter, ce sont les "properties" à la groovy. Cette page pourra surement t'éclairer : http://groovy.codehaus.org/Groovy+Beans

    A plus

  3. #3
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Son getter est private. Il ne devrait pas y avoir accès si comme il le dit il est bien dans une classe différente.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par vic Voir le message
    Son getter est private. Il ne devrait pas y avoir accès si comme il le dit il est bien dans une classe différente.
    Au temps pour moi j'avais pas vu oO

    Mais mon lien dit ceci
    A name declared with no access modifier generates a private field with public getter and setter (i.e. a property).
    Ce qui reste encore cohérent, étant donné que je ne sais pas quel code est généré par le compilo groovy pour les getter/setter. Il me semblait que la convention JavaBean était suivie, donc il serait intéressant que je teste

    Ceci dit d'où vient le "My Task" ? tu peux nous donner le code complet ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Salut,

    Citation Envoyé par George7 Voir le message
    Au temps pour moi j'avais pas vu oO
    Ceci dit d'où vient le "My Task" ? tu peux nous donner le code complet ?
    Sorry, l'exemple que j'ai donné provient de plusieurs essais, d'où l'incohérence

    Voici l'exemple exécutable dans la console Groovy :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Task {
     
        private String name;
     
        private String getName() {
            println "getName()"
            return name;
        }
    }
     
    Task task1 = new Task(name: "tester")
    print task1.name
    =>
    Le comportement théorique d'après la doc :
    Pas de modifier => champs privé, getter/setter implicite
    Modifier private => génère un champs privé en Java, sans getter/setter public.
    Modifier public => champs public sans getter/setter.

    J'ai entre-temps trouvé une explication. Il s'agirait d'un bug connu :
    http://igorsfindings.blogspot.com/20...t-private.html

    Groovy knows about this issue, since many have complained. The current stable version that came out is 1.6.6 and the Groovy team is promising a few breaking changes for the version 2.0
    Assez surprenant tout de même

  6. #6
    Invité
    Invité(e)
    Par défaut
    En effet un bug qui permet d'accèder aux champs privés c'est pas rien...
    Ou alors c'est juste dans la console ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par George7 Voir le message
    En effet un bug qui permet d'accèder aux champs privés c'est pas rien...
    Ou alors c'est juste dans la console ?
    Non, testé également avec Eclipse... C'est bien un bug du moteur.

    Dans le même ordre d'idée, le code suivant (tapé de mémoire) fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    List<Integer> myList = new ArrayList();
    myList.add("coucou");   // uniquement l'ajout d'entier devrait être autorisé
    Mais bon c'est un autre débat

  8. #8
    Invité
    Invité(e)
    Par défaut
    Groovy est et reste quand même un langage dynamique, donc il est possible que le compilo ignore le type générique si il repère que ton code utilise un autre type.

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

Discussions similaires

  1. Fonctionnement des WeakHashMap
    Par seiryujay dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 03/10/2005, 14h12
  2. Fonctionnement des fichiers.
    Par phoenix440 dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 29/05/2005, 15h36
  3. [SQL Access] Modifier la structure d'une table
    Par Le Lézard dans le forum Bases de données
    Réponses: 6
    Dernier message: 28/06/2004, 14h03
  4. Liste des champs modifiés avant post
    Par SebCBien dans le forum Bases de données
    Réponses: 3
    Dernier message: 22/02/2004, 10h10
  5. [langage] fonctionnement des Processus
    Par GMI3 dans le forum Langage
    Réponses: 3
    Dernier message: 19/09/2003, 11h12

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