Datentypen Enum-Werte Bestanteil von anderem Enum

Hallo,
Kann man ein Enum um ein anderes erweitern?

Mit folgendem Beispiel, versuche ich zu verdeutlichen, was ich meine:
Java:
import java.util.ArrayList;

public class Board {
	private ArrayList<CellValue> cells;
}

enum Player {
	BLACK, WHITE
}

enum CellValue {
	GRAS, STONE, WATER,
	BLACK, WHITE // Player
}
Es gibt ein Spielbrett mit Zellen. In diesen Zellen kann ein Spieler (BLACK, WHITE) stehen oder etwas anderes (GRAS, STONE, WATER).
In CellValue müssen nochmal alle Werte von Player aufgezählt werden, was extrem umständlich ist. Kann man nicht irgendwie sagen, dass alle Werte von Player Werte von CellValue sein sollen?

Vielen Dank,
Michael
 
Ich denke dein Problem liegt irgendwo anders.
Denn wenn ich mir das so überdenke, kann ein Player auch AUF Grass stehen. So wie du das allerdings vorhast geht es nicht.
 
Ich denke auch, dass das nicht viel Sinn machen würde ... rein intuitiv. Ein Feld wäre dann ja entweder "GRASS" oder "BLACK", aber ich vermute, du willst "BLACK on GRASS" beschreiben. Da könnte man zwar mit Flags und Bitoperationen anfangen, aber ... wenn es nicht gerade um eine Engine geht, wäre eine abstraktere Beschreibung wohl sinnvoller...
 
Danke für die Antworten.
War eigentlich nur ein Beispiel. Leider ein schlechtes -.- Hier würde man es wohl anders lösen.
Es geht allgemein um die Erweiterung von einem Enum um die Werte eines anderen Enums.
 
Enums lassen sich nicht erweitern - letztendlich kommt am Ende auch ne Konstantenklasse raus mit nem Haufen public static-Variablen und ein paar Methoden.

Kannst dir ja mal den Bytecode von ner Enum anschauen, dann erklärt sich auch warum "extends" nicht möglich ist.
 
War mir schon klar, dass man was selber basteln muss. Was haltet ihr von diesem Ansatz:
Java:
import java.util.ArrayList;

public class Board {
	private ArrayList<CellValue> cells;

	public Board() {
		cells = new ArrayList<CellValue>();
		cells.add(CellValue.GRAS);
		cells.add(CellValue.STONE);
		cells.add(CellValue.WATER);
		cells.add(Player.BLACK);
		cells.add(Player.WHITE);
	}

}

class Player extends CellValue {
	public static final Player BLACK = new Player();
	public static final Player WHITE = new Player();

	protected Player() {}
}

class CellValue {
	public static final CellValue GRAS = new CellValue();
	public static final CellValue STONE = new CellValue();
	public static final CellValue WATER = new CellValue();

	protected CellValue() {}
}
Ist zwar kein richtiges enum, aber abgesehen von switch sollte man es wie ein enum verwenden können. Oder fallen euch weitere Einschränkungen auf?

Schöne Grüße,
Michael
 
Zuletzt bearbeitet:
Wenn du die enums nicht gerade in einem switch verwenden willst, hilft dir evtl. das weiter:
Java:
public interface Terrain<T extends Enum<T>> {
  // durch "<T extends Enum<T>>" kann das Interface nur in enums verwendet werden
  // ob's Sinn macht, erschliesst sich mir nicht.
}

public enum StandardTerrain implements Terrain<StandardTerrain> {
  LAND, WATER,
}

public enum ExtendedTerrain implements Terrain<ExtendedTerrain> {
  GRASS, STONE,
}
In seinem Programm verwendet man nun ausschliesslich nur noch das Interface ("Terrain<?>"), statt die konkreten Enums. Das birgt aber leider den Nachteil, dass man diese nicht mehr in switches verwenden kann, aber dass scheint dir ja ohnehin nicht wichtig.
 
Zuletzt bearbeitet von einem Moderator:
Vielleicht solltest du wirklich nochmal beschreiben, was du eigentlich vorhast - also das Ziel, nicht den "Lösungs"ansatz....
 

Zurück
Oben