GetBoolean von Java Boolean: Nützlich, wenn auch unvollkommen

Die Boolean.getBoolean (String) -Methode ist eine statische Methode, die ab und zu nützlich sein kann. Es ist sehr leicht, diese Methode als eine zu verwechseln, die den entsprechenden Booleschen Wert basierend auf dem bereitgestellten String zurückgibt (z. B. was Boolean.valueOf (String) und Boolean.parseBoolean (String) tun), aber die Javadoc-Dokumentation für diese Methode erklärt, was es ist Wirklich: Die Boolean.getBoolean(String)Methode "Gibt nur dann true zurück, wenn die durch das Argument angegebene Systemeigenschaft vorhanden ist und der Zeichenfolge 'true' entspricht."

Die Boolean.getBoolean(String)Methode bietet Entwicklern eine Methode zum Bestimmen, ob eine bestimmte Eigenschaft auf "true" gesetzt ist. Es wird nur "true" zurückgegeben, wenn die Eigenschaft definiert ist und der Wert, für den sie definiert ist, eine Form von "true" ist, wobei der Fall von "true" keine Rolle spielt. Bei dem Eigenschaftsnamen selbst wird zwischen Groß- und Kleinschreibung unterschieden, bei seinem Wert ("true", "TRUE", "trUE", "TRue" usw.) wird jedoch zwischen Groß- und Kleinschreibung unterschieden.

Der folgende Java-Code wird Boolean.getBoolean(String)in Aktion demonstriert .

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

Durch Ausführen der obigen Klasse mit Eigenschaften, die über die Option -D des Java Application Launcher angegeben wurden, werden die Nuancen von Boolean.getBoolean(String)demonstriert. Die im nächsten Screenshot enthaltenen Ergebnisse zeigen an, dass Boolean.getBoolean(String)tatsächlich zurückgegeben wird, truewenn ein bestimmter Eigenschaftsname angegeben wird, und mit einem String-Wert von "true" definiert wird, wobei in jedem Fall für die vier Buchstaben "true" gilt. Andererseits wirkt sich das Ändern der Groß- und Kleinschreibung des Eigenschaftsnamens auf die Ergebnisse von aus Boolean.getBoolean(String). Mit anderen Worten, während "true" und "TRUE" aus Sicht des Eigenschaftswerts gleich sind , sind "i.am.here" und "I.AM.HERE" aus Sicht des Eigenschaftsnamens völlig unterschiedliche Eigenschaftsnamen .

Es gibt verschiedene Verwendungszwecke für die Boolean.getBoolean(String)Methode, einschließlich der bedingten Laufzeitlogik, die davon abhängt, ob ein Parameter festgelegt ist oder nicht. Der Blog-Beitrag Bitte verwenden Sie Boolean.getBoolean (SOME_FLAG_KEY) behandelt diese Verwendung ausführlicher.

Obwohl diese Methode sehr nützlich ist, steht außer Frage, dass sie nicht so gut benannt ist, wie sie gewesen sein könnte. Mehrere Blog-Beiträge drücken die Enttäuschung der Java-Entwickler über diese API-Namensauswahl und Hosting-Klasse für die statische Methode aus: Ich bin in die Falle von Boolean.getBoolean () geraten [Oktober 2007], Java-API-Fallstricke: Boolean.getBoolean (String) [Oktober 2005 ], Etwas Spaß mit Boolean.getBoolean (String) [Juli 2009], Boolean.getBoolean nicht das, was Sie denken [Oktober 2003], und jemals von Boolean.getBoolean (String) [diesen Monat!] Busted.

Fazit

Ich finde Boolean.getBoolean(String)es manchmal sehr nützlich, aber ich stimme auch anderen oben genannten Java-Entwicklern zu, dass dies keine der besseren API-Entscheidungen ist. Wie mehrere andere vorgeschlagen haben, scheint es besser in die Klasse java.lang.System zu passen, und ich hätte einen Methodennamen wie "isPropertyTrue (String)" vorgezogen. Wenn man sich dieser Subtilität und der Unterscheidung zwischen Boolean.getBoolean (String) und Boolean.valueOf (String) (oder Boolean.parseBoolean (String), verfügbar seit J2SE 5) bewusst ist, können beide Methoden entsprechend angewendet werden in bestimmten Situationen sehr wertvoll sein.

Diese Geschichte "getBoolean von Java Boolean: Nützlich, wenn auch unvollkommen" wurde ursprünglich von JavaWorld veröffentlicht.