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 à l'essai
    Inscrit en
    Juin 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Juin 2004
    Messages : 9
    Points : 10
    Points
    10
    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 confirmé
    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 : 47
    Localisation : Suisse

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

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

    ...j'ai raté quelque chose?
    Glob
    What would you do if you were not afraid?

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  3. #3
    Expert éminent
    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
    Points : 8 339
    Points
    8 339
    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 (en bas)

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

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    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 confirmé
    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 : 47
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Points : 630
    Points
    630
    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?
    Glob
    What would you do if you were not afraid?

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  6. #6
    Membre chevronné
    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 : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    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)
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

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

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    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 confirmé
    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 : 47
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Points : 630
    Points
    630
    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+
    Glob
    What would you do if you were not afraid?

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 851
    Points
    22 851
    Billets dans le blog
    51
    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 chevronné
    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 : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    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 )
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

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

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