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 :

Comment remplacer Getter/Setter par une propriété, comme en C# ?


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2004
    Messages : 9
    Par défaut Comment remplacer Getter/Setter par une propriété, comme en C# ?
    Bonjour à tous,

    J'avais lu il y a quelques temps une doc décrivant comment utiliser des propriétés en Java à la place des GET et SET, comme cela se fait en C# ou en VB.NET.

    Malheureusement je n'arrives pas à remettre la main sur cet article, j'ai passé toute la matinée à chercher

    Si quelqu'un pouvais me rafraichir la mémoire en m'indiquant comment on fait ca, je lui en serait fort reconnaissant !!

    Tristan RENAUD.

  2. #2
    Membre chevronné
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Par défaut
    Heu simplement en mettant les attributs de ta classe en public...

    ...j'ai raté quelque chose?

  3. #3
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Oui, C# ne fait que simuler l'accès à une variable, en réalité, ça masque des appels aux setters et getters, ce qui permet d'améliorer la lisibilité tout en préservant l'encapsulation.

    Cependant, étant donné que Java n'autorise même pas la surcharge des opérateurs (c'est une remarque, pas une critique, je m'y connais pas encore assez en Java pour dire si c'est ou non pénalisant ), je doute fortement qu'il autorise de masquer les appels aux getters et setters...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  4. #4
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    En effet, tu ne pourras pas masquer l'accès aux getteurs/setteurs, donc tu peut mettre un membre en public, pour y accéder depuis une autre classe, mais c'est plutôt conseillé et plus propre (du moins je trouve) avec des getteurs/setteurs.

  5. #5
    Membre chevronné
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Par défaut
    tu ne pourras pas masquer l'accès aux getteurs/setteurs,
    Bin moi je les mets private si je veux, ils sont ainsi "masqués"...

    Ceci dit, perso je préfère avoir à taper le code de mes get/set moi-même tout seul, ainsi je peux par exemple décider de mettre un getter public et un setter private... Et ainsi je peux même décider de mettre un attribut public sans get/set.

    Génial, non?

  6. #6
    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
    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
     
    public class CompteEnBanque {
           private int id ; // possible aussi public final !
           public int getId() { return this.id ; }
     
          private double solde ;
          public double getSolde() {.....}
          public void depot(double mnt) {.....}
          public void retrait(double mnt) {......}
          // PAS DE SET SOLDE: casserait l'encapsulation !!!!
     
        private double découvertAutorisé ;
        public void setDécouvertAutorisé(double mnt) {....}
        public double getDécouvertAutorisé() { ....}
    }
    c'était juste pour dire que la paire get/set n'est pas automatique:
    les champs immuables n'ont pas de set (ainsi que les champs modifiables pour lesquels un set casserait l'encapsulation)
    (maintenant si on est maniaque on peut mettre ces "sets" en privé mais l'intérêt n'est pas toujours évident)

  7. #7
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par Glob
    Bin moi je les mets private si je veux, ils sont ainsi "masqués"...
    C'est pas ce que j'entendais par masqué.

    D'après ce que j'ai compris, tu peut faire x.y et ca correspond à x.getY(), ce n'est pas ainsi que ca se passe en Java.

  8. #8
    Membre chevronné
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Par défaut
    Ah ok, j'l'avais pas vu sous cet angle. Me voici à présent un peu plus érudit un matière de .NET (j'ai pour ainsi dire triplé mes connaissances en la matière d'un seul coup).

    Merci A+

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 896
    Billets dans le blog
    54
    Par défaut
    Effectivement cela n'existe pas dans le language, quoi qu'il me semble avoir vu recement sur javadesktop.org que quelqu'un se proposait de generer des setter/getter automatiquement en utilisant des annotations customisees lors de la declaration des membres dans les JavaBeans. Pour ma part en general j'utilise des Map<String, Object> modifiee nommees Parameters , contenant un PropertyChangeSupport et dont la methode put() a ete redefinie et declaree finale de maniere a lancer un PropertyChangeEvent avec eventuellement des fonctions de convenances representant les setters/getters histoire de faire un peu plus de verification (nottament sur le type et les valeurs acceptees)... quand j'ai le temps de les ecrire.

    Mais ce n'est pas une solution 100% parfaite :
    - On peut rajouter des "variables" non-supposees etre dans l'objet (en appelant directement put()).
    - On peut quand mettre des valeurs non-autorisees ou pas du bon type (en appelant directement put() egalement).

    Aussi ces objets sont rarement publiques (en general package-protected car partages entre plusieurs classes).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  10. #10
    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
    Citation Envoyé par bouye
    j'utilise des Map<String, Object> modifiee nommees Parameters
    cette technique est très courante ... mais justement pour désigner des attributs informels qui ne sont pas essentiels à la gestion de l'objet. Les "vrais" membres ne devraient pas entrer dans cette catégorie (sauf p.e. dans des Beanifications très poussées )

  11. #11
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    la reponse est simple faire du C#, ou bien developpez une nouvelle JVM
    Tchô

Discussions similaires

  1. [Débutant] Comment remplacer un chiffre par une image
    Par jackdos dans le forum VB.NET
    Réponses: 10
    Dernier message: 08/05/2015, 14h32
  2. Réponses: 49
    Dernier message: 02/02/2013, 02h10
  3. Combinaisons : comment remplacer des if par une boucle
    Par maccormick dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 06/10/2011, 14h40
  4. Réponses: 4
    Dernier message: 01/04/2009, 12h11
  5. [Postsharp] Manager les getter et setter d'une propriété
    Par anthyme dans le forum Framework .NET
    Réponses: 4
    Dernier message: 13/01/2009, 11h19

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