Enum austauschbar machen

miasma

Aktives Mitglied
Hallo,

ist es irgendwie möglich ein Enum austauschbar zu machen? Irgendwie durch ein Service Provider Interface oder so etwas? Ich hab die essentiellen Methoden, die jede Enum-Konstante implementieren muss in ein Interface ausgelagert.

Bspw. will ich Knoten in einer Baumstruktur serialisieren/deserialisieren:

Java:
		for (final NodeBase node : mNodes.values()) {
			final Kind nodeKind = node.getKind();
			final byte id = nodeKind.getId();
			out.writeByte(id);
			nodeKind.serialize(out, node, mPageReadTrx);
		}

Java:
		for (int offset = 0; offset < size; offset++) {
			final byte id = in.readByte();
			final Kind enumKind = Kind.getKind(id);
			final NodeBase node = enumKind.deserialize(in, pageReadTrx);
			mNodes.put(node.getNodeKey(), node);
		}

Allerdings will ich die Knotentypen austauschbar machen, d.h. die ganze enum-Klasse. Wie macht man sowas? Kind implementiert NodeKind für serialize(...), deserialize(...), getId(). Vielleicht mit einem Parameter Class<? extends NodeKind> irgendwo als Parameter (Class<? extends Enum<?> & NodeKind> ist ein Syntaxfehler). Und dann beim serialisieren bspw. über getEnumConstants iterieren und schauen wann die Konstante == nodeKind Konstante ist und dann .serialize(...) aufrufen?

Vielen Dank,
Johannes
 
Das widerspricht mMn der Intention von Enums, dass du immer eine abzählbare, nicht erweiterbare Menge von Instanzen der Klasse, also des Enums hast. Das Vorgehen mit dem Interface für Enums benutzen wir in unserem Projekt auch, allerdings nur, damit sie gleich behandelt werden können. Dennoch hat jedes Enum seine eigene Aufgabe und kann nicht durch andere ausgetauscht werden.
 
Prinzipiell kann ich ja auch eine NodeFactory-Klasse oder sowas einführen und intern in der NodeFactory-Klasse dann ein enum nutzen, das sollt eigentlich glaube ich klappen.
 

Neue Themen


Zurück
Oben