Programmering

Java Boolean's getBoolean: Useful Albeit Imperfect

Boolean.getBoolean (String) -metoden er en statisk metode, der kan være nyttig nu og da. Det er meget let at forveksle denne metode som en måde, der på en eller anden måde returnerer den passende boolske baseret på den medfølgende streng (såsom hvad Boolean.valueOf (String) og Boolean.parseBoolean (String) gør), men Javadoc-dokumentationen til denne metode forklarer, hvad den er virkelig gør: Boolean.getBoolean (streng) metode "Returnerer sandt, hvis og kun hvis systemegenskaben navngivet af argumentet findes og er lig med strengen 'sand'."

Det Boolean.getBoolean (streng) metoden giver udviklere en metode til at bestemme, om en bestemt egenskab er indstillet til "sand". Den returnerer kun "sand", hvis egenskaben er defineret, og værdien, den er defineret til, er en eller anden form for "sand", hvor tilfældet "sand" ikke betyder noget. Sagen med selve ejendomsnavnet er store og små bogstaver, men dets værdi ("sand", "SAND", "SAND", "SAND" osv.) Er med store bogstaver ifølsom.

Følgende Java-kode demonstrerer Boolean.getBoolean (streng) i aktion.

DemonstrerBooleanGetBoolean.java

pakke dustin. eksempler; importere statisk java.lang.System.out; / ** * Demonstrer nytten af ​​Boolean.getBoolean (String) på trods af dets navngivningsproblem. * / public class DemonstrateBooleanGetBoolean {/ ** * Hovedfunktion til udførelse af eksempler, der demonstrerer brug og effekter af * Boolean.getBoolean (String). * / public static void main (final String [] argumenter) {final String basicPropertyName = "i.am.here"; endelig streng basicUppercasePropertyName = basicPropertyName.toUpperCase (); endelige streng were HereProperty = "were.here.property"; final String wasHereProperty = "was.here.property"; out.println (basicPropertyName + "er" + Boolean.getBoolean (basicPropertyName)); out.println (basicUppercasePropertyName + "er" + Boolean.getBoolean (basicUppercasePropertyName)); out.println (wereHereProperty + "er" + Boolean.getBoolean (wereHereProperty)); out.println (wasHereProperty + "er" + Boolean.getBoolean (wasHereProperty)); hvis (Boolean.getBoolean ("i.am.set")) {System.out.println ("Jeg er klar !!!"); } andet {System.out.println ("Jeg er IKKE indstillet !!!"); }}} 

Ved at udføre ovennævnte klasse med egenskaber, der er specificeret via Java-applikationsstarterens -D-indstilling, nuancerne af Boolean.getBoolean (streng) demonstreres. Resultaterne i det næste skærmbillede viser, at Boolean.getBoolean (streng) vender faktisk tilbage rigtigt når et bestemt egenskabsnavn er angivet og defineres med en strengværdi på "sand" med ethvert tilfælde for de fire bogstaver, der udgør "sandt". På den anden side påvirker ændringen af ​​sagen om ejendomsnavnet resultaterne af Boolean.getBoolean (streng). Med andre ord, mens "sand" og "SAND" er de samme fra en ejendom værdi perspektiv, "i.am.here" og "I.AM.HERE" er helt forskellige ejendomsnavne fra a ejendomsnavn perspektiv.

Der er flere anvendelser til Boolean.getBoolean (streng) metode inklusive betinget runtime-logik baseret på, om en parameter er indstillet eller ej. Blogindlægget Brug venligst Boolean.getBoolean (SOME_FLAG_KEY) dækker denne brug mere detaljeret.

Selvom denne metode er meget nyttig, er der ingen tvivl om, at den ikke er så godt navngivet som den kunne have været. Flere blogindlæg udtrykker Java-udvikleres skuffelse over dette API-navngivningsvalg og hostingklasse til den statiske metode: I Fell in the Trap of Boolean.getBoolean () [October 2007], Java API Pitfalls: Boolean.getBoolean (String) [October 2005] ], Noget sjovt med Boolean.getBoolean (String) [Juli 2009], Boolean.getBoolean ikke hvad du synes det er [Oktober 2003], og nogensinde blevet bustet af Boolean.getBoolean (String) [denne måned!].

Konklusion

jeg finder Boolean.getBoolean (streng) at være en meget nyttig metode til tider, men jeg er også enig med andre Java-udviklere, der er citeret ovenfor, at det ikke er en af ​​de bedre API-beslutninger. Som flere andre har antydet, ser det ud til, at det måske passer bedre i klassen java.lang.System, og jeg ville have foretrukket et metodenavn som "isPropertyTrue (String)". Når det er sagt, når man først er opmærksom på denne subtilitet og sondringen mellem Boolean.getBoolean (String) og Boolean.valueOf (String) (eller Boolean.parseBoolean (String), tilgængelig siden J2SE 5), kan begge metoder anvendes korrekt og være meget værdifuld i visse situationer.

Denne historie, "Java Boolean's getBoolean: Useful Albeit Imperfect" blev oprindeligt udgivet af JavaWorld.