Duplicaté possible: strong>
Pourquoi utiliser des getters and Setters? P>Ceci est une question de Newbie. Est-il très nécessaire d'utiliser GetMethods pour accéder à des valeurs de propriété? Une fois la valeur attribuée, on peut obtenir le répertoire de valeurs. Par exemple, dans le code ci-dessous,
displayName () code> peut afficher la valeur de prénom sans l'aide d'une méthode getter. Ou il s'agit d'une normes de codage standard que l'on doit disposer d'une méthode getter et de réglage ou toute autre méthode qui donne cette valeur? P>
class Test{ private String firstName; public void setName(String fname){ firstName = fname; } public void displayName() { System.out.println("Your name is " + firstName); } }
6 Réponses :
Utilisez toujours Getter and Setter pour accéder à vos propriétés! P>
Vous devez jeter un coup d'œil à Cet article ... p>
Même dans les cas de classes privées et de classes imbriquées?
Cela s'applique-t-il également si vous souhaitez accéder au champ de la classe (comme s'il est dans cet exemple)? Je ne pense pas que l'article ne parle que de l'accès extérieur et de l'utilisation alternative des domaines publics (que je suis d'accord devrait avoir lieu au minimum).
Dans votre cas (pour afficher le nom d'affichage), il n'est pas nécessaire de fournir Getter. P>
Mais si vous voulez utiliser le champ d'une autre classe, nous devons fournir la méthode Getter. P>
dire, ne pas demander est un principe important dans la conception orientée objet. Généralement, vous devriez dire aux objets de faire des choses plutôt que de leur poser des questions. getters / setters tous les endroits découragage cette pratique car vous êtes encouragé à atteindre à l'intérieur d'un objet et à vous rendre dans les champs (ou même pire atteindre et percer les choses dans le cas des configurissures). Cela rompt l'encapsulation et rend votre code plus difficile à raisonner. P>
Dans votre cas particulier, je créerais un objet appelé nom code> qui dispose d'un constructeur qui prend le nom et la méthode unique pour l'afficher. P>
Getter et Setters font partie de l'interface standard pour les haricots Java et de nombreux cadres tels que Hibernate les attendent en place. Cela étant dit qu'il est bien sûr de décider si et quand vous en avez besoin et dans quel but. Ils donnent accès à vos variables de votre membre privé et ils peuvent même vous donner la chance de faire plus que simplement obtenir et définir. P>
Le point du logiciel OO est la réutilisation. Cela signifie que d'autres programmeurs, ou des années d'ici, peuvent utiliser le code pour d'autres systèmes. P>
Lorsque vous avez des variables de membre privé et utilisez des fonctions Get / Set, vous pouvez modifier la mise en œuvre interne de la fonction sans casser tout l'autre code qui l'utilise. P>
Avoir un état privé, l'encapsulation est bonne et dans beaucoup de cas, c'est la bonne chose. Supposons que votre classe soit supposée être en sécurité, avoir des champs publics que vous ne pouvez pas vous assurer que. P>
D'autre part, il y a des cas quand cela est inutile! Supposons que vous accédez à votre objet uniquement dans un seul colis, vous êtes sûr que vous n'exporterez jamais, alors pourquoi déranger? P>
Assez sûr que vous pouvez avec le mot clé code> volatile code>.
@ Woot4moo La seule chose que vous allez vous assurer que la volatilité est la visibilité, ce qui ne suffit pas pour la sécurité du fil
Cela semble être en désaccord:
@ Woot4moo mais vous ne pouvez rien faire d'enceinte ..
Je n'ai pas de liens pour soutenir cela, mais c'est ce que je fais.
J'essaie d'éviter les champs publics s'ils ne sont pas statiques. Je viens donc d'utiliser des champs protégés et privés. De l'intérieur de la classe, vous pouvez y accéder sans obtenir / set, c'est complètement bien. De l'extérieur de la classe, essayez toujours d'utiliser get / set. P>
Donc, votre code exemple est complètement bien EDIT: une exception pour moi est si je crée une classe de conteneur struct em> type p> alors puis Je pense que les champs publics sont ok. Il serait toujours préférable de les rendre privés et de nommer les getters Public int x1 () code> etc. cependant. Dès que certaines méthodes sont introduites sur ce conteneur qui change l'état de l'instance (comme modifiant les valeurs de x1 / x2 / x3 / x4), je les fais privé et ajoute get / set. < / p> p>