GetBoolean de Java Boolean: utile bien qu'imparfait

La méthode Boolean.getBoolean (String) est une méthode statique qui peut être utile de temps en temps. Il est très facile de confondre cette méthode avec celle qui retourne en quelque sorte le booléen approprié en fonction de la chaîne fournie (comme ce que font Boolean.valueOf (String) et Boolean.parseBoolean (String)), mais la documentation Javadoc de cette méthode explique ce qu'elle fait vraiment: la Boolean.getBoolean(String)méthode "Renvoie true si et seulement si la propriété système nommée par l'argument existe et est égale à la chaîne 'true'.

La Boolean.getBoolean(String)méthode fournit aux développeurs une méthode pour déterminer si une propriété particulière est définie sur "true". Il ne renvoie «true» que si la propriété est définie et que la valeur à laquelle elle est définie est une forme de «true» où le cas de «true» n'a pas d'importance. La casse du nom de propriété lui-même est sensible à la casse, mais sa valeur ("vrai", "TRUE", "vrai", "TRue", etc.) est sensible à la casse.

Le code Java suivant montre Boolean.getBoolean(String)en action.

DemonstrateBooleanGetBoolean.java

package dustin.examples; import static java.lang.System.out; /** * Demonstrate the usefulness of Boolean.getBoolean(String) despite its naming * issue. */ public class DemonstrateBooleanGetBoolean { /** * Main function for executing examples demonstrating use and effects of * Boolean.getBoolean(String). */ public static void main(final String[] arguments) { final String basicPropertyName = "i.am.here"; final String basicUppercasePropertyName = basicPropertyName.toUpperCase(); final String wereHereProperty = "were.here.property"; final String wasHereProperty = "was.here.property"; out.println(basicPropertyName + " is " + Boolean.getBoolean(basicPropertyName)); out.println(basicUppercasePropertyName + " is " + Boolean.getBoolean(basicUppercasePropertyName)); out.println(wereHereProperty + " is " + Boolean.getBoolean(wereHereProperty)); out.println(wasHereProperty + " is " + Boolean.getBoolean(wasHereProperty)); if (Boolean.getBoolean("i.am.set")) { System.out.println("I'm set!!!"); } else { System.out.println("I'm NOT set!!!"); } } } 

En exécutant la classe ci-dessus avec les propriétés spécifiées via l'option -D du lanceur d'application Java, les nuances de Boolean.getBoolean(String)sont démontrées. Les résultats contenus dans la capture d'écran suivante indiquent que Boolean.getBoolean(String)cela renvoie effectivement truequand un nom de propriété particulier est spécifié et est défini avec une valeur de chaîne de "true" avec dans tous les cas les quatre lettres constituant "true". En revanche, la modification de la casse du nom de propriété affecte les résultats de Boolean.getBoolean(String). En d'autres termes, alors que "true" et "TRUE" sont identiques du point de vue de la valeur de propriété , "i.am.here" et "I.AM.HERE" sont des noms de propriété complètement différents du point de vue du nom de propriété .

Il existe plusieurs utilisations de la Boolean.getBoolean(String)méthode, notamment la logique d'exécution conditionnelle basée sur le fait qu'un paramètre est défini ou non. Le billet de blog Veuillez utiliser Boolean.getBoolean (SOME_FLAG_KEY) couvre cette utilisation plus en détail.

Bien que cette méthode soit très utile, il ne fait aucun doute qu'elle n'est pas aussi bien nommée qu'elle aurait pu l'être. Plusieurs articles de blog expriment la déception des développeurs Java face à ce choix de dénomination d'API et à cette classe d'hébergement pour la méthode statique: I Fell in the Trap of Boolean.getBoolean () [octobre 2007], Java API Pitfalls: Boolean.getBoolean (String) [octobre 2005 ], Some Fun with Boolean.getBoolean (String) [juillet 2009], Boolean.getBoolean not what you think it [octobre 2003], et Ever Been Busted by Boolean.getBoolean (String) [this month!].

Conclusion

Je trouve que c'est Boolean.getBoolean(String)parfois une méthode très utile, mais je suis également d'accord avec les autres développeurs Java cités ci-dessus pour dire que ce n'est pas l'une des meilleures décisions d'API. Comme plusieurs autres l'ont suggéré, il semble que cela aurait pu mieux s'intégrer dans la classe java.lang.System et j'aurais préféré un nom de méthode tel que "isPropertyTrue (String)". Cela étant dit, une fois que l'on est conscient de cette subtilité et de la distinction entre Boolean.getBoolean (String) et Boolean.valueOf (String) (ou Boolean.parseBoolean (String), disponible depuis J2SE 5), les deux méthodes peuvent être appliquées de manière appropriée et être très précieux dans certaines situations.

Cette histoire, "getBoolean de Java Boolean: Utile mais imparfaite" a été initialement publiée par JavaWorld.