56 votes

(non) Propriétés en Java?

J'ai donc volontairement gardé moi-même un Java n00b jusqu'à récemment et ma première exposition réelle a provoqué un choc mineur: Java n'a pas de propriétés de style C #!

Ok, je peux vivre avec ça. Cependant, je peux aussi jurer que j'ai vu le code de lecture / définition de la propriété en Java dans une base de code, mais je ne me souviens plus où. Comment cela a-t-il été réalisé? Existe-t-il une extension linguistique pour cela? Est-ce lié à NetBeans ou quelque chose?

64voto

Calum Points 3160

Il y a un "standard" modèle pour les getters et les setters en Java, appelé des propriétés du bean. Fondamentalement, la méthode, en commençant par get, prenant aucun argument et renvoyant une valeur, est une propriété de lecture pour une propriété nommée comme le reste du nom de la méthode (avec un lowercase début de la lettre). De même, set crée un setter d'une méthode void avec un seul argument.

Par exemple:

// Getter for "awesomeString"
public String getAwesomeString() {
  return awesomeString;
}

// Setter for "awesomeString"
public void setAwesomeString( String awesomeString ) {
  this.awesomeString = awesomeString;
}

La plupart des Java Ide génère ces méthodes pour vous si vous leur demandez (dans Eclipse, c'est aussi simple que de déplacer le curseur d'un champ et en tapant ctrl-1, puis en sélectionnant l'option de la liste).

Pour ce que ça vaut, pour des raisons de lisibilité, vous pouvez réellement utiliser is et has à la place de get de type booléen propriétés de trop, comme dans:

public boolean isAwesome();

public boolean hasAwesomeStuff();

34voto

Je suis surpris que personne n'ait mentionné le projet de lombok

Oui, il y a actuellement pas de propriétés en java. Il y a quelques autres fonctionnalités manquantes ainsi.
Mais heureusement, nous avons pour projet de lombok qui est d'essayer d'améliorer la situation. Il est aussi de plus en plus populaires chaque jour.

Donc, si vous êtes à l'aide de lombok:

@Getter @Setter int awesomeInteger = 5;

Ce code va générer getAwesomeInteger et setAwesomeInteger ainsi. Donc, il est tout à fait similaire à C# propriétés implémentées automatiquement.

Vous pouvez obtenir plus d'informations sur lombok getters et setters ici.
Vous devriez certainement vérifier d'autres caractéristiques ainsi. Mes favoris sont:

Lombok est bien intégré avec IDEs, de sorte qu'il va montrer méthodes générées comme si elles existaient (suggestions, classe de contenu, allez à la déclaration et du refactoring).
Le seul problème avec lombok est que d'autres programmeurs ne savent pas à ce sujet. Vous pouvez toujours delombok le code, mais c'est plutôt une solution de contournement qu'une solution.

11voto

Cheekysoft Points 16532

"Java Property Support" a été proposé pour Java 7, mais n’a pas été intégré dans le langage.

Voir http://tech.puredanger.com/java7#property pour plus de liens et d’informations, si vous êtes intéressé.

6voto

Hank Gay Points 36173

La convention de haricot est d'écrire du code comme ceci:

 private int foo;
public int getFoo() {
    return foo;
}
public void setFoo(int newFoo) {
    foo = newFoo;
}
 

Dans certains des autres langages de la machine virtuelle, par exemple Groovy, vous obtenez des propriétés remplaçables similaires à C #, par exemple

 int foo
 

auquel on accède avec un simple .foo et exploite les implémentations getFoo et setFoo par défaut que vous pouvez remplacer si nécessaire.

6voto

dantuch Points 5048
 public class Animal {

    @Getter @Setter private String name;
    @Getter @Setter private String gender;
    @Getter @Setter private String species;
}
 

C'est quelque chose comme les propriétés C #. C'est http://projectlombok.org/

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