Programování

Tip Java 5: Konstanty Java

Tento týden vytvoříme některé konstanty, které mají všechny výhody používání zařízení preprocesoru C k definování konstant kompilace a podmíněného kompilace kódu.

Java se zbavila celé představy textového preprocesoru (pokud vezmete Javu jako „potomka“ C / C ++). Můžeme však získat ty nejlepší výhody alespoň některých funkcí preprocesoru C v Javě: konstanty a podmíněná kompilace.

Jednou z nepochybně dobrých vlastností preprocesoru C je schopnost definovat konstanty kompilace pomocí textového názvu, který představuje určitou hodnotu. To usnadňuje čtení a údržbu. Je také rychlejší za běhu než použití normální proměnné.

Pravděpodobně zneužitou vlastností preprocesoru C je použití #definovat spolu s #ifdef a přátelé podmíněně kompilovat celé bloky kódu. Říkám, že je to diskutabilní, protože lidé často využívají toto zařízení k řešení problémů specifických pro jednotlivé platformy (a to je dobré místo) a špatný bod).

V jazyce C lze definovat některé konstanty v souboru záhlaví pomocí:

#define MY_BDATE 10 #define SILLY_PLATFORM 

a poté získat přístup k těmto konstantám pomocí #zahrnout zahrnout je do souboru kódu a poté je použít:

fprintf (stderr, "Moje narozeniny jsou% d" "th! \ n", MY_BDATE); 

Ekvivalent v Javě lze provést vytvořením veřejné statické finále proměnné v Javě rozhraní:

rozhraní ConstantStuff {public static final int MY_BDATE = 10; public static final boolean SillyPlatform = true; } 

Pak k nim můžeme přistupovat pomocí import zviditelnit rozhraní pro nás a poté použít konstanty:

System.out.println ("Moje narozeniny jsou" + ConstantStuff.MY_BDATE + "th!"); 

Preprocesor C může podmíněně odstranit velké oblasti textu, pokud daná konstanta preprocesoru byla nebo nebyla definována.

#if defined (SILLY_PLATFORM) / * Spousta ošklivého kódu pro řešení hloupostí platformy * SILLY. * / #else / * Kód pro jednání s jinými běžnými platformami. * / #endif 

Mnoho lidí si stěžuje, že tato schopnost v Javě chybí. Nezapomeňte, že jedním z důvodů, proč je Java tak úžasná, je to, že jazyk je mnohem lépe definován, takže by měl být specifický systémový kód ne být dokonce nutný.

Ať je to jakkoli, stále můžete získat tento druh podmíněně zkompilovaného kódu přímo z kompilátoru! Stačí použít public static final boolean konstanty jako podmínka pro regulární -li prohlášení. Kompilátor Java je dostatečně chytrý, aby to rozpoznal jako speciální případ, a může zcela vyloučit test a kód příslušné podmíněné větve.

Stačí tedy napsat podmíněný příkaz jako obvykle.

 if (ConstantStuff.SillyPlatform) {// Kód, který se použije, pokud je platforma true * v době kompilace *. } else {// Kód, který se použije, pokud je platforma nepravdivá * v době kompilace *. } 

Nevím o tobě, ale nesnáším, když musím psát to zdlouhavé rozhraní název před použitím kterékoli z těchto konstant. Takže mám svoji třídu, která bude používat tyto konstanty nářadí the rozhraní. Pak mohu použít pouze název přímo, za předpokladu, že nedojde k žádným střetům s názvy (v takovém případě je budete muset odlišit pomocí celých jmen).

Všechny tyto zábavné věci jsem dal dohromady do několika jednoduchých aplikací Java. Konstanty (//www.javaworld.com/javatips/javatip5/Constants.java) nářadí the rozhraní a používá konstanty přímo, zatímco Constants2 (//www.javaworld.com/javatips/javatip5/Constants2.java) používá pro přístup ke konstantám plně kvalifikovaná jména.

John D. Mitchell je dalším absolventem UC-Berkeley Computer Science, který odstavil kofein, cukr a příliš málo spánku. Strávil tři roky prací na softwaru PDA v Geoworks za zásoby, které ve skutečnosti mají větší hodnotu než tapeta. Po prvním veřejném vydání Javy zachránil svou denní práci, aby vyvinul applety a kompilátor Java. Financuje svou závislost na Javě psaním překladačů, systémů Tcl / Tk, Perl, C ++ a Java. Jeho spousta volného času je pohlcena moderováním diskuzní skupiny comp.lang.tcl. Ohlašováním a psaním úžasné knihy v jazyce Java.

Tento příběh, „Java Tip 5: Java constants“, původně publikoval JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found