65 votes

Getters et Setters Java

Existe-t-il un meilleur moyen standard de créer des getters et setters en Java ?

Il est assez verbeux de devoir définir explicitement des getters et setters pour chaque variable. Existe-t-il une meilleure approche des annotations standard ?

Est-ce que Spring a quelque chose comme ça ?

Même le C# a des propriétés.

17 votes

Ce n'est probablement pas ce que vous voulez entendre, mais la plupart des IDE peuvent les générer pour vous.

0 votes

Pour répondre à la partie de la question concernant le printemps : Non, pas vraiment. De plus, après avoir "programmé" XML pendant quelques jours, vous supplierez de retrouver la joie de coder des getters et setters soignés et concis :)

0 votes

Corrigez-moi si je me trompe, mais vous devez toujours écrire des propriétés C#, n'est-ce pas ? Ce n'est pas comme si elles étaient implicites et que vous deviez les écrire uniquement si vous voulez étendre le comportement de base de lecture/écriture d'une variable. La seule chose qu'elles ont de plus que les getters et setters est qu'elles les gardent côte à côte.

71voto

Carl Smotricz Points 36400

Je ne sais pas si vous considérez cela comme "standard", mais Projet Lombok répond à ce problème. Ils utilisent les annotations pour remplacer une grande partie de la verbosité de Java.

Certaines personnes s'intéressent à d'autres langages apparentés à Java, tels que Groovy ou Scala. Je crains qu'il ne faille attendre quelques années - voire pas du tout - avant que la JSR ne trouve un moyen "standardisé" de "régler" ce problème dans Java proprement dit.

10 votes

+1 : Lombok est un ajout intéressant, et peut également prendre en charge hashCode, equals & toString . Cela vaut la peine de jeter un coup d'oeil pour les classes de données stupides

3 votes

+1 pour Lombok qui est très cool, mais -1 pour être essentiellement spécifique à l'IDE. Avec tout autre IDE, vous obtenez une masse d'erreurs qui décorent le code, car l'IDE ne sait pas ce qui se passe. Je ne suis pas non plus tout à fait sûr de la façon dont il fonctionne avec les débogueurs.

1 votes

Il fonctionne bien avec Maven également, et ils viennent d'ajouter une option de-lombok qui génère du code source sans aucune référence à lombok.

20voto

Ascalonian Points 3496

Eclipse dispose d'une option de menu contextuel qui les génère automatiquement pour vous, comme le font, j'en suis sûr, de nombreux autres IDE.

3 votes

Ce n'est pas vraiment la meilleure solution, mais c'est ce à quoi nous sommes limités.

3 votes

Chaque fois que je modifie quelque chose avec un tas de champs, je supprime simplement les getters et setters et je demande à Eclipse de les régénérer tous. C'est du bruit.

6voto

Scott Stanchfield Points 15863

J'ai créé quelques annotations qui ne sont pas spécifiques à Eclipse.

Voir http://code.google.com/p/javadude/wiki/Annotations

Par exemple :

package sample;

import com.javadude.annotation.Bean;
import com.javadude.annotation.Property;
import com.javadude.annotation.PropertyKind;

@Bean(properties={
    @Property(name="name"),
    @Property(name="phone", bound=true),
    @Property(name="friend", type=Person.class, kind=PropertyKind.LIST)
}) 
public class Person extends PersonGen {
}

Mes annotations génèrent une superclasse ; je pense que Lombok modifie la classe réelle en cours de compilation (ce qui n'est pas officiellement pris en charge par Sun et peut entraîner une rupture - je peux me tromper sur la façon dont cela fonctionne, mais d'après ce que j'ai vu, ils doivent le faire).

Profitez-en ! -- Scott

3voto

Joel Points 11003

La plupart des IDE fournissent un raccourci pour générer le code (par ex. Eclipse : Clic droit -> Source -> Générer des récupérateurs et des régleurs. ), bien que je réalise que ce n'est probablement pas la réponse que vous recherchez.

Certains frameworks IOC permettent d'annoter les propriétés afin qu'elles puissent être utilisées dans le contexte du framework, par exemple Tapestry IOC, et le dernier Spring, je pense (mais cette utilisation est limitée à l'utilisation par le framework).

3voto

Jerome Cance Points 3788

Voici un article intéressant sur le sujet : http://cafe.elharo.com/java/why-java-doesnt-need-properties-it-already-has-them/

Je pense que les propriétés sont un raccourci, mais c'est plus une petite fonctionnalité qu'une fonctionnalité importante.

1 votes

J'ai passé quelques années à développer en Delphi. J'ai toujours considéré les propriétés comme l'une des meilleures fonctionnalités de Delphi. J'ai toujours été un peu triste que Java ne dispose pas de cette fonctionnalité. Anders Hejlsberg a intégré les propriétés dans C# et maintenant les gens de MS les ont et nous ne les avons pas. Il s'agit peut-être d'une "petite" fonctionnalité, mais tout ce qui réduit le code réduit les erreurs et augmente la compréhensibilité.

1 votes

Jérôme - Je ne suis pas d'accord. La liaison en Java est actuellement paralysée par le manque de support. Imaginez que vous ne puissiez pas obtenir le membre statique .class, mais que vous deviez passer des chaînes de caractères à la place. Je vois toujours des gens écrire que les propriétés dans le langage ne seraient que du sucre syntaxique, mais ce n'est pas le cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X