web-dev-qa-db-fra.com

Noms JavaBeans valides pour les méthodes getter booléennes

Je sais que la plupart des noms de variables fonctionneront avec "is", comme isBlue(), mais "has" a également un préfixe valide, comme hasProperty()?

57
Robert

Selon la spécification JavaBeans section 8.3.2:

Propriétés booléennes
De plus, pour les propriétés booléennes, nous autorisons une méthode getter à correspondre au modèle:

public boolean is<PropertyName>();

Cette méthode "isPropertyName" peut être fournie au lieu d'une "get<PropertyName> ", ou peut être fournie en plus d'une" get<PropertyName> ". Dans les deux cas, si le is<PropertyName> la méthode est présente pour une propriété booléenne alors nous utiliserons le "is<PropertyName> "pour lire la valeur de la propriété. Un exemple de propriété booléenne peut être:

public booléen isMarsupial (); public void setMarsupial (booléen m);

En d'autres termes, à moins que quelque chose n'ait changé depuis, has n'est pas un préfixe valide, je le crains :(

Il est possible que certains outils et bibliothèques reconnaissent de telles propriétés de toute façon, mais ce n'est pas une bonne idée de s'y fier.

71
Jon Skeet

Jon Skeet a noté que selon la spécification, il n'est pas valide. De plus, canX, shouldX et les likes ne sont pas valides. Ce qui est plutôt regrettable. Voici un moyen de vérifier si une propriété donnée a un getter valide:

BeanInfo info = Introspector.getBeanInfo(Item.class);
Item itm = new Item();
for (PropertyDescriptor pd : info.getPropertyDescriptors()) {
    System.out.println(pd.getName() + " : " + pd.getReadMethod());
}

La classe Item doit être un javabean avec une propriété foo et un getter. Si la méthode de lecture est null, cela signifie qu'il n'y a pas de getter valide défini selon la spécification javabeans.

9
Bozho

C'est quelque peu subjectif, mais oui, je dirais que "a" est un préfixe parfaitement valide pour une propriété booléenne.

éditez la question, telle que posée, ne mentionnait pas la spécification javabeans et donc ma réponse n'a pas abordé cet aspect de la question. D'où la réponse ci-dessus.

4
Ryan Guill