Programmering

Java Tips 5: Java-konstanter

Denne uken lager vi noen konstanter som har alle fordelene ved å bruke C-forprosessorens fasiliteter til å definere kompileringstidskonstanter og betinget kompilert kode.

Java har kvittet seg med hele forestillingen om en tekstlig preprosessor (hvis du tar Java som en "nedstigning" av C / C ++). Vi kan imidlertid få de beste fordelene med i det minste noen av C-forprosessorens funksjoner i Java: konstanter og betinget kompilering.

En av de ufattelig gode egenskapene til C-prosessoren er muligheten til å definere kompileringstidskonstanter ved å bruke et tekstnavn for å representere en verdi. Dette gjør det lettere å lese og vedlikeholde. Det er også raskere ved kjøretid enn å bruke en normal variabel.

Et utvilsomt misbrukt trekk ved C-prosessoren er bruken av #definere sammen med #ifdef og venner for å betingelig kompilere hele kodeblokker. Jeg sier det kan diskuteres siden folk ofte bruker dette anlegget til å håndtere plattformspesifikke problemer (og det er begge det gode poenget og det dårlige poenget).

I C kan man definere noen konstanter i en headerfil via:

#define MY_BDATE 10 #define SILLY_PLATFORM 

og deretter få tilgang til disse konstantene ved å bruke #inkludere å inkludere dem i en kodefil, og deretter bruke dem:

fprintf (stderr, "Bursdagen min er på% d" "! \ n", MY_BDATE); 

Tilsvarende i Java kan gjøres ved å opprette offentlig statisk finale variabler i en Java grensesnitt:

grensesnitt ConstantStuff {public static final int MY_BDATE = 10; offentlig statisk slutt boolsk SillyPlatform = true; } 

Da kan vi få tilgang til dem ved å bruke import for å gjøre grensesnittet synlig for oss og deretter bruke konstantene:

System.out.println ("Bursdagen min er" + ConstantStuff.MY_BDATE + "th!"); 

C-forprosessoren kan betinget fjerne store områder av tekst hvis en gitt forprosessorkonstant var eller ikke var definert.

#if defined (SILLY_PLATFORM) / * Mye stygg kode for å håndtere dumhetene til * SILLY-plattformen. * / #else / * Kode for å håndtere andre, normale plattformer. */ #slutt om 

Mange beklager at denne muligheten er fraværende fra Java. Husk at en av grunnene til at Java er så fantastisk er at språket er så mye bedre definert, så systemspesifikk kode som den burde ikke til og med være nødvendig.

Uansett kan du fortsatt få den slags betinget kompilert kode fra kompilatoren direkte! Du bruker bare offentlig statisk endelig boolsk konstanter som betingelse for en vanlig hvis uttalelse. Java-kompilatoren er smart nok til å gjenkjenne det som et spesielt tilfelle, og det kan eliminere testen og koden til den aktuelle betingede grenen fullstendig.

Så skriv bare den betingede uttalelsen som vanlig.

 hvis (ConstantStuff.SillyPlatform) {// Kode som skal brukes hvis plattformen er sann * ved kompileringstid *. } annet {// Kode som skal brukes hvis plattformen er falsk * ved kompileringstid *. } 

Jeg vet ikke om deg, men jeg hater å måtte skrive så langvarig grensesnitt navn før du bruker noen av disse konstantene. Så jeg har bare klassen min som skal bruke disse konstantene implementere de grensesnitt. Da kan jeg bare bruke navnet direkte, forutsatt at det ikke er noen sammenstøt med navn (i så fall må du skille dem ut med de fulle navnene).

Jeg har satt alle disse morsomme tingene sammen i et par enkle Java-applikasjoner. Konstanter (//www.javaworld.com/javatips/javatip5/Constants.java) redskaper de grensesnitt og bruker konstantene direkte mens Constants2 (//www.javaworld.com/javatips/javatip5/Constants2.java) bruker fullt kvalifiserte navn for å få tilgang til konstantene.

John D. Mitchell er nok en UC-Berkeley-datavitenskapsutdannet som er avvent på koffein, sukker og altfor lite søvn. Han brukte tre år på PDA-programvare på Geoworks for lager som faktisk er verdt mer enn tapet. Han reddet sin daglige jobb etter den første offentlige utgivelsen av Java for å utvikle applets og en Java-kompilator. Han finansierer sin Java-avhengighet ved å skrive kompilatorer, Tcl / Tk, Perl, C ++ og Java-systemer. Hans store fritid forbrukes ved å moderere comp.lang.tcl. Kunngjøre nyhetsgruppen og skrive en fantastisk Java-bok.

Denne historien, "Java Tips 5: Java konstants" ble opprinnelig utgitt av JavaWorld.

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