Homepagebau
Dateiversion:
diesen Beitrag diskutieren,
ergänzen, eine Frage stellen

fertige Klasse zum Download

Schwierigkeitsgrad:

 

Klasse downloadenversion: 13.12.2003


ZIP-Archiv
3 kbyte

Hinweis: benötigt Java Laufzeitumgebung 1.2 oder höher


 

Beschreibung

Aufzählungen in Java 5    Beispiele in Java 1.2    Klassenspezifikation

Aufzählungstypen wurden für Java ab Version 5 eingeführt. Mit der Klasse EnumerationTy, können sie aber auch schon mit Version 1.2 bis 1.4 Aufzählungstypen in ihre älteren Anwendungen integrieren. Diese Klasse können Sie downloaden und als Erweiterung der Sprache verwenden.

Aufzählungen in Java 5

Farbpalette als Aufzählungstyp

enum farben = {rot, gruen, schwarz};
farben farbpalette = farben.rot;

Diese Syntax ist quasi identisch zu Aufzählungstypen in C++

Aufzählungen in Java vor Version 5

Farbpalette als Aufzählungstyp
... mit Hilfe der Klasse EnumerationTy ist nun folgende Implementierung möglich

String[] farben = new String[] {"rot", "grün", "schwarz"};
EnumerationTy farbpalette = new EnumerationTy(farben, "rot");

In Java 1.x ist der Code leider etwas länger als in Java 5: er funktioniert allerdings ebenso gut.

praktische Beispiele in Java 1.2

Zahlenmengen

int[] hexzahlen     = new int[] {0, 8, 16, 32, 64};
EnumerationTy hexa  = new EnumerationTy(
hexzahlen, 8);
EnumerationTy deci  = new EnumerationTy(
new int[] {0, 10, 20}, 10);

if (hexa.contains(0)) {} // true:  0 ist Element der Grundmenge {0,8,16,32,64}
if (deci.contains(8)) {} // false: 8 ist kein Element der Grundmenge {0,10,20}

if (hexa.set(8)) {} // das funktioniert - aber:
if (deci.set(8)) {} /* EnumerationTy.EnumTypeException !!!
denn: 8 ist kein Element der Grundmenge {0,10,20}

System.out.println(hexa.get()); // gibt "8" aus

Bitte beachten sie, dass die instanzspezifische Methode .get() als Rückgabewert immer ein Objekt vom Typ Object liefert.
Sie müssen also eventuell eine Typkonvertierung durchführen, falls sie weiter mit dem Wert arbeiten möchten. Zum Beispiel:

if (hexa.get() == new Integer(8)) {} // ist false !!!

int myNumber = (new Integer( (hexa.get()).toString() )).intValue();
if (myNumber == 8) {} // aber: dieser Vergleich ergibt true

Mengen mit gemischten Typen

Sie können - und das ist das Besondere - auch Aufzählungen von Objekten verschiedener Typen angeben.
Dazu muss es sich aber um Referenztypen handeln. Werttypen müssen durch ihre Hüllklassen repräsentiert werden. 

Float     myFloat  = new Float(1.0);
Integer   myInt    = new Integer(2);
String    myString = "abc";

Object[] myCollection = new Object[] {myFloat,myInt,myString};

EnumerationTy mix = new EnumerationTy(myCollection, myString);

System.out.println(mix.get()); // gibt "abc" aus

Klassenspezifikation

Hinweis: Die Schnittstellenspezifikation EnumerationInterface ist dem ZIP-Archiv beigelegt

EnumerationTy
public class EnumerationTy implements EnumerationInterface {

// öffentliche Konstruktorfunktionen

EnumerationTy (int[] values);
EnumerationTy (double[] values);
EnumerationTy (float[] values);
EnumerationTy (char[] values);
EnumerationTy (Object[] values);
EnumerationTy (int chosenValue);
EnumerationTy (double chosenValue);
EnumerationTy (float chosenValue);
EnumerationTy (char chosenValue);
EnumerationTy (Object chosenValue);
EnumerationTy (int[] values, int chosenValue) throws EnumerationTy.EnumTypeException;
EnumerationTy (float[] values, float chosenValue) throws EnumerationTy.EnumTypeException;
EnumerationTy (double[] values, double chosenValue) throws EnumerationTy.EnumTypeException;
EnumerationTy (char[] values, char chosenValue) throws EnumerationTy.EnumTypeException;
EnumerationTy (Object[] values, Object chosenValue) throws EnumerationTy.EnumTypeException;

// öffentliche instanzspezifische Methoden

void set(Object newValue) throws EnumerationTy.EnumTypeException;
Object get();
boolean contains(Object element);

}