Enums subclassen / erweitern?

Daishy

Neues Mitglied
Hi zusammen,

Ich fuerchte der Titel ist nicht ganz getroffen, aber ich hoffe es kommt nah genug dran :).
Ich sitze momentan an einem Problem und kann mir nicht vorstellen, dass es dafuer keine schoene Loesung gibt. Ich habe mehrere Messages, die alle von der Klasse Message erben. Diese werden, wie der Name schon vermuten laesst, in meinem Programm durch die Gegend geschickt. Soweit auch kein Problem.
Jetzt verwaltet jede Message eine Liste von Fehlern, die bei der Verarbeitung auftreten koennen in Form von Enums. Also z.B.

Java:
public class MessageA extends Message {
    public enum Error {
        error_a, error_b, error_C
    }

    ...weitere Transportdaten...
}

Jetzt soll es in jeder Message 3 Methoden geben (setError, getError, hasError), die exakt das tun, was die Namen verraten. Sie sollen sich jeweils auf das Error-Enum beziehen, dass die jeweilige Nachricht definiert. Nun wuerde ich ungern die drei Methoden jeweils wieder in jeder Message-Subklasse implementieren, sondern sie in die Hauptklasse auslagern. Um das zu machen muesste jedoch die Hauptklasse eine Error-Enum haben, dass in den Kind-Nachrichten jeweils erweitert bzw. ueberschrieben wird, damit ich eben expliziten Fehler setzen kann. Also z.B.:

Java:
MessageA m = new MessageA(objekt_fuer_den_transport);
...
m.setError(MessageA.Error.error_a);
...
if(m.getError() == MessageA.Error.error_a) ...

Ist sowas auch mit Enums moeglich, oder muesste ich da den Umweg ueber interne Static-Final-Klassen gehen? (Quasi so wie es vor den Enums gemacht wurde)

Vielen Dank schonmal jetzt fuer die Hilfen :)

Gruesse,
Daishy
 

slawaweis

Bekanntes Mitglied
das ist ein Fall für die Generics, Beispiel:

Java:
 public abstract class AbstractMessage<T extends Enum>
 {
  protected T error_type = null;

  public T getError()
   {
   return error_type;
   }
 }

 public class MessageA extends AbstractMessage<MessageA.Error>
 {
  public enum Error { ERROR_A, ERROR_B, ERROR_C };
 }

Aber noch ein paar Sachen zum Design. Solche Klassen wie "Message" sollten immutable sein, um Fehler im Design von Anfang an zu vermeiden. D.h. der Fehler-Wert sollte nur einmal gesetzt werden, z.B. im Konstruktor, und dann nicht veränderbar sein. Also setError entweder weglassen oder protected machen.

Weiterhin ist meine Erfahrung in solchen Sachen, man sollte mit OOP und Klassen nicht übertreiben. Früher habe ich z.B. für jeden Fehler im System eine eigene Exception-Klasse erstellt, bis mir die instanceof und die Typumwandlungen zu viel wurden. Heute erstelle ich, wenn überhaupt, nur eine einzige eigene Exception-Klasse für ein ganzes System. So wäre es vielleicht von Vorteil sich nur eine universelle Klasse Message anzulegen und eine Enum Klasse für alle Fehlerarten. Erspart später viel Schreibarbeit und die Wartung wird auch einfacher.

Slawa
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Enums zum ersten mal Allgemeine Java-Themen 15
F Enums als innere Klasse sinnvoll? Allgemeine Java-Themen 3
C Enums und Vererbung Allgemeine Java-Themen 6
C Vergleich von Enums gibt inkorrekte Werte Allgemeine Java-Themen 6
D prüfen, ob Enums bestimmte Elemente enthalten Allgemeine Java-Themen 3
B Vererbung bei enums ? Allgemeine Java-Themen 3
GilbertGrape Eine Art Basisklasse für Enums Allgemeine Java-Themen 9
G Typensicherheit bei enums Allgemeine Java-Themen 4
T enums - eigener startwert Allgemeine Java-Themen 5
V Enums aus Datei-Einträgen erzeugen? Allgemeine Java-Themen 6
S Methode die Enums verarbeiten kann? Allgemeine Java-Themen 2
F Frage zu switch und enums Allgemeine Java-Themen 5
B Enums hinzufügen Allgemeine Java-Themen 6
M enums ineinander schachteln Allgemeine Java-Themen 10
S Enums - statischer import Allgemeine Java-Themen 2
D Erste Schritte Liste erweitern Allgemeine Java-Themen 11
Bluedaishi Zeile um zeichen erweitern Allgemeine Java-Themen 9
J Application mit PLugin erweitern Allgemeine Java-Themen 2
A Java Kenntnisse erweitern Allgemeine Java-Themen 5
E Java Programm mit Clients erweitern - Möglichkeiten? Allgemeine Java-Themen 2
B Hilfe!! spiel um Funktion des Selektierens erweitern (mit ASCII-Tabelle) Allgemeine Java-Themen 3
J build.xml erweitern Allgemeine Java-Themen 2
B Polibios Array erweitern Allgemeine Java-Themen 1
M XML-Datei "erweitern" mit Java Allgemeine Java-Themen 2
K Java Standardbib/reservierte Wörter erweitern Allgemeine Java-Themen 1
H Reg Exp Ausdruck erweitern Allgemeine Java-Themen 2
T Klassen Mehoden einer Klasse erweitern Allgemeine Java-Themen 5
M HashMaps: Wert erweitern Allgemeine Java-Themen 3
Rudolf JUnit4-Testklasse erweitern ohne zu vererben Allgemeine Java-Themen 6
J Input/Output Jar-Datei zur Laufzeit erweitern Allgemeine Java-Themen 13
nrg URL erweitern Allgemeine Java-Themen 2
T Klassen Fabrik (Factory) zur Laufzeit erweitern Allgemeine Java-Themen 5
GUI-Programmer JDK erweitern Allgemeine Java-Themen 42
S Ant erweitern..? Allgemeine Java-Themen 4
I Pattern zum Erweitern existierender Objekte Allgemeine Java-Themen 4
C Kontextmenü erweitern und mit Java Anwendung verknüfen. Allgemeine Java-Themen 3
W Erweitern einer Klasse mit Generics Allgemeine Java-Themen 8
M eigene Klasse durch Composition mit java.io.File erweitern Allgemeine Java-Themen 3
J Können Programme sich selbst erweitern? Allgemeine Java-Themen 6
dunhillone Mittels Annotations Methoden "erweitern"? Allgemeine Java-Themen 11
S Objekt in Datei erweitern Allgemeine Java-Themen 16
DamienX Erweitern von Runnable Allgemeine Java-Themen 3
P Funktion vorhanden - wie auf Transitivität erweitern? Allgemeine Java-Themen 6
N Classpath mit ClassLoader künstlich erweitern Allgemeine Java-Themen 2
M ArrayList erweitern - generics Allgemeine Java-Themen 4
P JComponenten (Button, JSlider, usw) erweitern Allgemeine Java-Themen 12
G Vector erweitern Allgemeine Java-Themen 4
G Tabellenzeilen erweitern Allgemeine Java-Themen 9
B desktop auf monitor erweitern Allgemeine Java-Themen 22
N Graphische Oberfläche dynamisch erweitern möglich? Allgemeine Java-Themen 4
D Programm um Klassen erweitern ohne neukompilieren? Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben