Programování

Java Boolean's getBoolean: Užitečné, i když nedokonalé

Metoda Boolean.getBoolean (String) je statická metoda, která může být občas užitečná. Je velmi snadné zaměnit tuto metodu za metodu, která nějakým způsobem vrátí příslušný Boolean na základě poskytnutého String (například co dělají Boolean.valueOf (String) a Boolean.parseBoolean (String)), ale dokumentace Javadoc k této metodě vysvětluje, co to opravdu ano: Boolean.getBoolean (řetězec) metoda "Vrací true, pokud a pouze tehdy, pokud existuje systémová vlastnost pojmenovaná argumentem a rovná se řetězci 'true'."

The Boolean.getBoolean (řetězec) metoda poskytuje vývojářům metodu pro určení, zda je určitá vlastnost nastavena na „true“. Vrátí „true“, pouze pokud je vlastnost definována a hodnota, na kterou je definována, je nějaká forma „true“, kde na případu „true“ nezáleží. U názvu vlastnosti se rozlišují velká a malá písmena, ale u jeho hodnoty („true“, „TRUE“, „trUE“, „TRue“ atd.) Se rozlišují velká a malá písmena. vcitlivý.

Následující kód Java ukazuje Boolean.getBoolean (řetězec) v akci.

DemonstrateBooleanGetBoolean.java

příklady zásilky; importovat statický java.lang.System.out; / ** * Prokázat užitečnost Boolean.getBoolean (String) navzdory problému s pojmenováním *. * / public class DemonstrateBooleanGetBoolean {/ ** * Hlavní funkce pro provádění příkladů demonstrujících použití a účinky * Boolean.getBoolean (String). * / public static void main (final String [] argumenty) {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 + "je" + Boolean.getBoolean (basicPropertyName)); out.println (basicUppercasePropertyName + "je" + Boolean.getBoolean (basicUppercasePropertyName)); out.println (wereHereProperty + "je" + Boolean.getBoolean (wereHereProperty)); out.println (wasHereProperty + "je" + Boolean.getBoolean (wasHereProperty)); if (Boolean.getBoolean ("i.am.set")) {System.out.println ("Jsem nastaven !!!"); } else {System.out.println ("NEJSEM nastaven !!!"); }}} 

Provedením výše uvedené třídy s vlastnostmi zadanými pomocí volby -D spouštěče aplikací Java budou nuance Boolean.getBoolean (řetězec) jsou předvedeny. Výsledky obsažené v následujícím snímku obrazovky to naznačují Boolean.getBoolean (řetězec) skutečně se vrací skutečný když je zadán název konkrétní vlastnosti a je definován hodnotou String "true" s případem čtyř písmen tvořících "true". Na druhou stranu změna velikosti názvu vlastnosti ovlivní výsledky Boolean.getBoolean (řetězec). Jinými slovy, zatímco „true“ a „TRUE“ jsou stejné z vlastnosti hodnota perspektiva, „i.am.here“ a „I.AM. HERE“ jsou zcela odlišné názvy vlastností od a název vlastnosti perspektivní.

Existuje několik použití pro Boolean.getBoolean (řetězec) metoda včetně podmíněné runtime logiky založené na tom, zda je parametr nastaven nebo ne. Příspěvek na blogu Použijte prosím Boolean.getBoolean (SOME_FLAG_KEY) podrobněji popisuje toto použití.

Ačkoli je tato metoda velmi užitečná, není pochyb o tom, že není tak dobře pojmenovaná, jak by mohla být. Několik příspěvků na blogu vyjadřuje zklamání vývojářů Javy z této volby pojmenování API a třídy hostování statické metody: Padl jsem do pasti Boolean.getBoolean () [říjen 2007], Úskalí Java API: Boolean.getBoolean (řetězec) [říjen 2005 ], Some Fun with Boolean.getBoolean (String) [July 2009], Boolean.getBoolean not what you think it is [October 2003], and Ever Been Busted by Boolean.getBoolean (String) [this month!].

Závěr

Najdu Boolean.getBoolean (řetězec) být někdy velmi užitečnou metodou, ale také souhlasím s dalšími výše uvedenými vývojáři Java, že to není jedno z lepších rozhodnutí API. Jak navrhlo několik dalších, zdá se, že by se to do třídy java.lang.System mohlo lépe hodit a já bych dal přednost názvu metody jako „isPropertyTrue (String)“. Jak již bylo řečeno, jakmile si člověk uvědomí tuto jemnost a rozdíl mezi Boolean.getBoolean (String) a Boolean.valueOf (String) (nebo Boolean.parseBoolean (String), který je k dispozici od J2SE 5), lze obě metody použít vhodně a být v určitých situacích velmi cenný.

Tento příběh „Java Boolean's getBoolean: Užitečný, i když nedokonalý“ byl původně publikován společností JavaWorld.