GetBoolean di Java Boolean: utile anche se imperfetto

Il metodo Boolean.getBoolean (String) è un metodo statico che può essere utile di tanto in tanto. È molto facile confondere questo metodo con quello che in qualche modo restituisce il booleano appropriato in base alla stringa fornita (come quello che fanno Boolean.valueOf (String) e Boolean.parseBoolean (String)), ma la documentazione Javadoc per questo metodo spiega di cosa si tratta lo fa davvero: il Boolean.getBoolean(String)metodo "Restituisce vero se e solo se la proprietà di sistema denominata dall'argomento esiste ed è uguale alla stringa 'true'."

Il Boolean.getBoolean(String)metodo fornisce agli sviluppatori un metodo per determinare se una particolare proprietà è impostata su "true". Restituisce "true" solo se la proprietà è definita e il valore a cui è definita è una forma di "true" in cui il caso di "true" non ha importanza. Il caso del nome struttura in sé è tra maiuscole e minuscole, ma il suo valore ( "vero", "TRUE", "true", "true", etc.) è caso in sensibile.

Il seguente codice Java si dimostra Boolean.getBoolean(String)in azione.

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!!!"); } } } 

Eseguendo la classe precedente con le proprietà specificate tramite l'opzione -D del programma di avvio dell'applicazione Java, Boolean.getBoolean(String)vengono dimostrate le sfumature di . I risultati contenuti nell'istantanea della schermata successiva indicano che Boolean.getBoolean(String)effettivamente ritorna truequando viene specificato un particolare nome di proprietà ed è definito con un valore String di "true" con qualsiasi caso per le quattro lettere che compongono "true". D'altra parte, la modifica del caso del nome della proprietà influisce sui risultati di Boolean.getBoolean(String). In altre parole, mentre "true" e "TRUE" sono gli stessi dal punto di vista del valore della proprietà , "i.am.here" e "I.AM.HERE" sono nomi di proprietà completamente diversi dal punto di vista del nome della proprietà .

Esistono diversi usi per il Boolean.getBoolean(String)metodo, inclusa la logica di runtime condizionale in base al fatto che un parametro sia impostato o meno. Il post del blog Please use Boolean.getBoolean (SOME_FLAG_KEY) tratta questo utilizzo in modo più dettagliato.

Sebbene questo metodo sia molto utile, non c'è dubbio che non sia così ben chiamato come avrebbe potuto essere. Diversi post del blog esprimono la delusione degli sviluppatori Java per questa scelta di denominazione API e la classe di hosting per il metodo statico: I Fell in the Trap of Boolean.getBoolean () [ottobre 2007], Java API Pitfalls: Boolean.getBoolean (String) [ottobre 2005 ], Some Fun with Boolean.getBoolean (String) [luglio 2009], Boolean.getBoolean not what you think it [ottobre 2003], and Ever Been Busted by Boolean.getBoolean (String) [this month!].

Conclusione

Trovo che Boolean.getBoolean(String)a volte sia un metodo molto utile, ma sono anche d'accordo con altri sviluppatori Java sopra citati che non è una delle migliori decisioni API. Come molti altri hanno suggerito, sembra che potrebbe adattarsi meglio alla classe java.lang.System e avrei preferito un nome di metodo come "isPropertyTrue (String)". Detto questo, una volta che si è consapevoli di questa sottigliezza e della distinzione tra Boolean.getBoolean (String) e Boolean.valueOf (String) (o Boolean.parseBoolean (String), disponibile da J2SE 5), entrambi i metodi possono essere applicati in modo appropriato e essere di grande valore in determinate situazioni.

Questa storia, "getBoolean di Java Boolean: utile anche se imperfetto" è stata originariamente pubblicata da JavaWorld.