extends myEnum

yaster

Mitglied
Hallo,

ist es möglich Enum zu erweitern?

Bsp:
Java:
public enum EnumA
{
    obj1(0),
    obj2(1);

    protected final int val;

    private EnumA(int v)
    {
        val = v;
    }

    public String getName()
    {
        switch (val)
        {
            case 1: return "object 1";
            case 2: return "object 2";
            default: return "ERROR";
        }
    }
}

public enum EnumB extends EnumA
{
    objX(2),
    objY(3);

    private EnumB(int v)
    {
        val = v;
    }

    public String getName()
    {
        switch (val)
        {
            case 0:
            case 1: return super.getName();
            case 2: return "object X";
            case 3: return "object Y";
            default: return "ERROR";
        }
    }
}

Also ich weis dass das Konstrukt "public enum EnumB extends EnumA" so von Java nicht akzeptiert wird. Aber vielleicht gibt es ja eine andere Möglichkeit.

Mir geht es darum, dass ich die Ganzen Typen nicht noch mal explizit definieren muss; wenn ich eh weis, dass sie die gleichen sind.

Anwendungsbeispiel:
Ich habe in einer der Datenbank-Tabelle ein Attribut, dass den Typen bezeichnet. Allerdings erhalte ich aus der Tabelle weitere Informatione (erweitert um eine andere Tabelle), so dass es ein neuer Typ (Client-Seitig) ist.
Also ich will die Standard-Typen in einem Enum haben, da es an vielen Stellen (getValues(),...) benötigt wird. Andererseit, werden an wenigen Stellen (ebenfalls getValues(),...) die Standard-Typen + der Extra-Typ benötigt.


Andersrum wäre es mir auch recht. Also wenn ich eine Menge von allen Typen habe, und in der Subklasse nur noch einen Teil.
Wobei ich nicht umbedingt noch ein Extra Atributt setzten will. Zwei "eigenständige" Enums wären mir da lieber.

Anwendungbeispiel:
Ich habe eine Menge an Materialien. Der eine Enum gibt mir alle, der andere nur die aus Metall, oder Holz.

Wäre dankbar, wenn mir jemand eine Idee liefert, wei man das Sauber, und ohne Redundanz hinbekommt.

Grüße,
yaster
 

KrokoDiehl

Top Contributor
Könntest du es ggfs über Interfaces mit Definitionen machen? Á la
Java:
public interface TypesA
{
    public static final int OBJ_1 = 1;
    public static final int OBJ_2 = 2;
}
Und dann:
Java:
public interface TypesB extends TypesA
{
    public static final int OBJ_3 = 3;
    public static final int OBJ_4 = 4;
}
 

Landei

Top Contributor
Enums lassen sich nicht erweitern, sie können auch nicht von anderen Klassen erben. Das einzige, was möglich ist, ist ein Interface zu erweitern. Damit lässt sich auch eine Hierarchie realisieren, allerdings wird es dann im "erweiterten" Fall Essig mit den switch-statements (es lassen sich nicht enums von verschiedenen Typen in einem switch-Statement verwenden):

Java:
interface Wertsachen {}
interface Geld extends WertSachen {}

enum Waehrung implements Geld {
   EURO, DOLLAR, PFUND, YEN
}

enum Zeugs implements Wertsachen {
  GOLD, SILBER, DIAMANTEN
}

List<Geld> geldList = new ArrayList<Geld>();
geldList.add(Waehrung.EURO); //OK
//FEHLER: geldList.add(Zeugs.GOLD); 

List<Wertsachen> wertList = new ArrayList<Wertsachen>();
wertList.add(Waehrung.EURO); //OK
wertList.add(Zeugs.GOLD); //OK

Alternativ kannst du natürlich statt einem Untertyp auch die Werte über eine Methode differenzieren (was natürlich nicht die feine OO-Art ist):

Java:
enum Wertsachen {
   EURO, DOLLAR, PFUND, YEN, GOLD, SILBER, DIAMANTEN;

   public boolean isGeld() {
      switch(this) {
      case EURO: case DOLLAR: case PFUND: case YEN: return true;
      default: return false; 
      }
   }
}
 
Zuletzt bearbeitet:

yaster

Mitglied
[duke]Danke[/duke]

Werde es demnächt ausprobieren.
Aber anstatt mit Interfaces zu arbeiten, scheint es mir dann doch einfacher noch ein Atributt hinzuzufühgen.
Muss mal schauen, was wirklich einfacher ist.
 

Ähnliche Java Themen

Neue Themen


Oben