# Java Enum und ordinal()



## SilentJ (26. Okt 2007)

Hallo,

damit ich nicht falsch verstanden werde, Java Enums sind toll. Mit ihnen kann man wirklich viel machen. Aber eine Sache bereitet mir Kopfschmerzen. Ich arbeite gerade an einer Schnittstellenimplementierung für einen Kollegen. Unter anderem soll diese Schnittstelle Objekte zurückgeben, die enumerierte Werte enthalten. Leider sieht die Vorgabe meines Kollegen vor, dass die Enums ab einem Index von 1 und nicht wie üblich bei 0 beginnen. Die Methode 
	
	
	
	





```
public int ordinal
```
 lässt sich, da final, nicht überschreiben. Was mache ich bloß jetzt?

Michael


----------



## byte (26. Okt 2007)

Ganz einfach: Du definierst ein eigenes Feld index inkl. Methode, die diesen zurückgibt und übergibst jeder Konstanten einen Wert (beginnend mit 1). Alternativ kannst du auch einfach eine Methode in der Enum definieren, die ordinal() + 1 zurückliefert.


----------



## SilentJ (26. Okt 2007)

Was wahrscheinlich am besten ist, wäre eine Wrapper-Klasse, die die Werte umsetzt.

Naja, so ganz das Gelbe vom Ei ist das aber noch nicht in Java. Da ist selbst C flexibler, was die Definition von Enums betrifft. 


```
enum week { Mon=1, Tue, Wed, Thu, Fri Sat, Sun} days;
```

Seit's drum.

Danke.

Michael


----------



## byte (26. Okt 2007)

```
enum Day {
  MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;

  public int index() {
    return ordinal() + 1;
  }
}
```

Aber hast natürlich recht, C ist wesentlich flexibler, denn da kann man machen, was man will.


----------



## Murray (26. Okt 2007)

Wenn die Werte nur zurückgeliefert werden, dann könntest du ganz einfach als ersten Wert der Enumeration einen Dummy-Wert einfügen:

```
public enum Werte { unused, ersterWert, zweiterWert};
```

Wenn die Werte aber auch als Parameter in Interface-Methoden verwendet werden, ist das keine gute Lösung, da man dann zur Laufzeit prüfen müsste, ob nicht böswilligerweise der "verbotete" Wert eingesetzt wurde.


----------

