Java-Tipp 5: Java-Konstanten

Diese Woche erstellen wir einige Konstanten, die alle Vorteile der Verwendung der Funktionen des C-Präprozessors zum Definieren von Konstanten zur Kompilierungszeit und bedingt kompiliertem Code bieten.

Java hat den gesamten Begriff eines Textpräprozessors beseitigt (wenn Sie Java als "Nachkommen" von C / C ++ betrachten). Wir können jedoch zumindest einige der Funktionen des C-Präprozessors in Java optimal nutzen: Konstanten und bedingte Kompilierung.

Eine der unbestreitbar guten Eigenschaften des C-Präprozessors ist die Fähigkeit, Konstanten zur Kompilierungszeit unter Verwendung eines Textnamens zu definieren, um einen Wert darzustellen. Dies erleichtert das Lesen und Verwalten. Es ist auch zur Laufzeit schneller als die Verwendung einer normalen Variablen.

Eine wohl missbrauchte Funktion des C-Präprozessors ist die Verwendung von #define zusammen mit #ifdef und Freunden , um ganze Codeblöcke bedingt zu kompilieren. Ich sage, es ist fraglich, da die Leute diese Funktion oft nutzen, um plattformspezifische Probleme zu lösen (und das ist sowohl der gute als auch der schlechte Punkt).

In C könnte man einige Konstanten in einer Header-Datei definieren über:

#define MY_BDATE 10 #define SILLY_PLATFORM 

und dann Zugriff auf diese Konstanten erhalten, indem Sie #include verwenden , um sie in eine Codedatei aufzunehmen, und sie dann verwenden:

fprintf (stderr, "Mein Geburtstag ist am% d" "th! \ n", MY_BDATE); 

Das Äquivalent in Java kann durch Erstellen öffentlicher statischer Endvariablen in einer Java- Schnittstelle erreicht werden :

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

Dann können wir auf sie zugreifen, indem wir importdie Schnittstelle für uns sichtbar machen und dann die Konstanten verwenden:

System.out.println ("Mein Geburtstag ist am" + ConstantStuff.MY_BDATE + "th!"); 

Der C-Präprozessor kann große Textbereiche bedingt entfernen, wenn eine bestimmte Präprozessorkonstante definiert wurde oder nicht.

#if defined (SILLY_PLATFORM) / * Viele böse Codes, um mit den Dummheiten der * SILLY-Plattform fertig zu werden. * / #else / * Code für andere normale Plattformen. * / #endif

Viele Leute beklagen, dass diese Fähigkeit in Java nicht vorhanden ist. Denken Sie daran, einer der Gründe, warum Java so wunderbar ist, ist, dass die Sprache so viel besser definiert ist, so dass systemspezifischer Code wie dieser nicht einmal notwendig sein sollte.

Wie dem auch sei, Sie können diese Art von bedingt kompiliertem Code immer noch direkt vom Compiler erhalten! Sie verwenden nur öffentliche statische endgültige boolesche Konstanten als Bedingung für eine reguläre if- Anweisung. Der Java-Compiler ist intelligent genug, um dies als Sonderfall zu erkennen, und kann den Test und den Code des entsprechenden bedingten Zweigs vollständig eliminieren.

Schreiben Sie einfach die bedingte Anweisung wie gewohnt.

if (ConstantStuff.SillyPlatform) {// Code, der verwendet werden soll, wenn die Plattform wahr ist * zur Kompilierungszeit *. } else {// Code, der verwendet werden soll, wenn die Plattform * zur Kompilierungszeit * falsch ist. }}

Ich weiß nichts über dich, aber ich hasse es, diesen langwierigen Schnittstellennamen schreiben zu müssen, bevor ich eine dieser Konstanten verwende. Ich habe also nur meine Klasse, die diese Konstanten verwenden wird, um die Schnittstelle zu implementieren . Dann kann ich den Namen einfach direkt verwenden, vorausgesetzt, es gibt keine Namenskonflikte (in diesem Fall müssen Sie sie anhand der vollständigen Namen unterscheiden).

Ich habe all diese lustigen Dinge in ein paar einfachen Java-Anwendungen zusammengefasst. Konstanten (//www.javaworld.com/javatips/javatip5/Constants.java) implementieren die Schnittstelle und verwenden die Konstanten direkt, während Constants2 (//www.javaworld.com/javatips/javatip5/Constants2.java) vollständig qualifizierte Namen für verwendet Zugriff auf die Konstanten.

John D. Mitchell ist ein weiterer Absolvent der UC-Berkeley Computer Science, der sich von Koffein, Zucker und viel zu wenig Schlaf ernährt hat. Er arbeitete drei Jahre lang an PDA-Software bei Geoworks, um Aktien zu finden, die mehr wert sind als Hintergrundbilder. Nach der ersten Veröffentlichung von Java, um Applets und einen Java-Compiler zu entwickeln, gab er seinen Job auf. Er finanziert seine Java-Sucht durch das Schreiben von Compilern, Tcl / Tk-, Perl-, C ++ - und Java-Systemen. Seine reichliche Freizeit wird durch das Moderieren der Newsgroup comp.lang.tcl.announce und das Schreiben eines fantastischen Java-Buches verbraucht.

Diese Geschichte "Java Tipp 5: Java-Konstanten" wurde ursprünglich von JavaWorld veröffentlicht.