Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe mich gefragt und kann dazu auch leider nichts gescheites finden im Internet.
Was passiert eigentlich mit den Typen die wir in einem Enum deklarieren?
Bsp.:
Java:
public enum Difficulty {
EASY, MEDIUM , HARD
}
Wenn wir dies nun ausführen, was passiert mit den Typen easy, medium und hard?
Werden die Attribute Intern zu eigenen Klassen?
Also haben wir eine Klasse easy eine Klasse medium etc.
Was passiert da genau?
Es gibt keine Typen EASY, MEDIUM und HARD. Der Typ ist Difficulty, während EASY, MEDIUM und HARD statische, finale Felder sind.
Was der Compiler daraus macht:
Java:
public final class Difficulty extends java.lang.Enum<Difficulty> {
public static final Difficulty EASY;
public static final Difficulty MEDIUM;
public static final Difficulty HARD;
public static Difficulty[] values();
public static Difficulty valueOf(java.lang.String);
static {};
}
Also wenn man so Fragen zu Java hat, ist aus meiner Sicht die beste Quelle immer die Java Language Specification: https://docs.oracle.com/javase/specs/
So wie @mihe7 schon ausgeführt hat, ist ein Enum ein eigenständiger Typ und zwar eine spezielle Klasse, für die ein paar Besonderheiten gelten.
So kann man z.B. zur Laufzeit keine neuen Instanzen dieses Typs erstellen. Somit sind die einzigen Instanzen diejenigen, die in dem enum definiert worden sind.
Da dies aber unter dem Strich auch Klassen sind, kann man einiges machen. So ist es möglich, dass ein Enum ein Konstruktor bekommt, es können Felder definiert werden mit Getter und so weiter...
(Aber die Regel mit der Erzeugung neuer Instanzen gilt weiterhin!)
Somit wäre ein Code denkbar wie:
Code:
public enum Difficulty {
EASY(0),
MEDIUM(1),
HARD(2);
Difficulty(int value) {
this.value = value;
}
private int value;
public int getValue() { return value; }
}
Hier hat Difficulty noch einen int Wert bekommen und bei der Definition hat man dann natürlich noch den Wert mitzugeben.