Lassen Sie uns sagen, dass ich ein paar Maschinen haben:Vergleich Enum-Einträge - Java
//Test code of course.
public class Start{
public static void main(String args[]){
System.out.println(Machine.COFFEE_GRINDER.getCatalogId());
System.out.println(Machine.COFFEE_MACHINE.isOfType(Machine.BASIC_MACHINE));
//The above should be true.
}
private enum Machine {
BASIC_MACHINE (-1),
BEVERAGE (-1),
COFFEE(-1),
COFFEE_GRINDER (5),
COFFEE_MACHINE (6),
GARDEN (-1),
LAWN_MOWER (28);
private final int catalogId;
public int getCatalogId(){
return catalogId;
}
public boolean isOfType(Machine to){
return this == to;
}
Machine (int catalogId) {
this.catalogId = catalogId;
}
}
}
Im Beispiel oben dort Maschinen sind, wie sie in einem Katalog erscheinen würde und ID-Nummern, die mit ihnen haben. Es gibt auch Abschnitte und Abschnitte von Abschnitten. Eine BEVERAGE-Maschine ist also immer noch eine BASIC_MACHINE. Eine KAFFEE-Maschine ist immer noch eine GETRÄNKE-Maschine.
Einige Funktionen in einem Programm müssen, bevor sie ihre Funktion ausführen, überprüfen, ob es sich bei der Maschine tatsächlich um ein BEFORE-Gerät handelt. Sowohl COFFEE_GRINDERs als auch COFFEE_MACHINEs aus dem Katalog würden ausgecheckt und die Funktion sollte durchlaufen werden.
Das Verhalten, das ich suche, ist vergleichbar mit instanceof oder die Vererbung von abstrakten Klassen. Wie auch immer, ein COFFEE_MACHINE ist eigentlich eine Art BASIC_MACHINE und ich möchte das überprüfen.
So:
Machine.COFFEE_MACHINE isa Machine.COFFEE
Machine.BEVERAGE isa MACHINE.BASIC_MACHINE
Machine.LAWN_MOWER isa Machine.GARDEN == Machine.BASIC_MACHINE
Machine.COFFEE_MACHINE isnota Machine.COFFEE_GRINDER
Machine.LAWN_MOWER isnota Machine.COFFEE
Sie müssen nur den Vererbungspfad von der speziellsten 'enum' Wert beginnt zu durchqueren und jeden Schritt überprüfen. Klingt eher trivial. – Jack
'VENDING' ist nicht definiert. Meintest du "GETRÄNKE"? – Andreas
Sie können 'Machine.COFFEE_MACHINE = Machine.COFFEE' usw. nicht zuweisen, da Enum-Konstanten Konstanten sind. "Etwas umsetzen?" Es würde helfen, wenn Sie beschreiben würden, was "etwas" Sie erreichen möchten. Der Titel erwähnt die Vererbung, aber außer für anonyme Body-Klassen können Sie keine Enumeration ableiten, und Sie sagen nicht, was Vererbung mit irgendetwas zu tun hat. Sie müssen die Typen nicht prüfen, um jede Konstante zu kennen, die ein Objekt vom Typ Maschine ist. Wie gezeigt, wird Ihr Code nicht kompiliert. Bitte erklären Sie, was Sie wollen, und stellen Sie kompilierbaren Code zur Verfügung. –