Nehmen wir an, ich habe zwei verschiedene Sets von Enums: Obst und Gemüse.
%Vor%Ich zeige das alles in einer JComboBox an. Nachdem jemand etwas ausgewählt hat, möchte ich eine Getter-Methode verwenden, um die Enum zu erhalten.
Für ein einzelnes Enum würde ich etwas tun wie:
%Vor%Irgendwelche Ideen, was der Rückgabetyp ist? Ich habe versucht, Enum anstelle von Fruits zu verwenden. Wenn ich das tue, habe ich anscheinend keinen Zugriff auf die Methoden getName ().
Hier ist eine weitere Demonstration dessen, wonach Sie suchen. Der Unterschied zwischen diesen und früheren Lösungen besteht darin, dass dieses ein generischeres und wiederverwendbares Muster ist. Dies geht tatsächlich über das ursprüngliche Problem hinaus, um einige andere Vorteile dieses Ansatzes aufzuzeigen. Sie können also nur die Bits kommentieren, die Sie nicht benötigen. Ich schließe auch einen Komponententest an, um das Verhalten zu demonstrieren.
Um im Grunde nach dem Namen Apple
oder APPLE
in einem dieser Enums zu suchen, schreiben Sie einfach:
FruitVeg<?> fvg = getEnum("APPLE", Fruits.class, Vegetables.class);
FruitVeg<>
ist eine Schnittstelle, die es ermöglicht, auch innerhalb von Enum zu tippen. Diese Schnittstelle erlaubt einige sehr interessante Dinge mit Enums unten zu tun. Hier sind nur einige der Dinge, die Sie damit tun könnten:
Enum.valueOf(fvg.getDeclaringClass(), fvg.name())
: gibt den Enum-Wert zurück, z. APPLE
fvg.getRaw()
: gibt den Enum-Wert zurück, z. APPLE
fvg.name()
: gibt den Stringnamen der Enumeration zurück z. APPLE
fvg.getFriendlyName()
: z.B. Apple
fvg.getDeclaringClass()
: gibt Class<Enum<?>>
z. Klasse ox.dummy.dummyTest $ Fruits
fvg.getClass()
: Klasse ox.dummy.dummyTest $ Früchte gibt Class<?>
EnumSet.allOf(fvg.getDeclaringClass()))
: z.B. [APPLE, PEAR]
Hier ist Code
%Vor% Option 1.
Erstellen Sie eine Methode, die Enum
und um den Namen von enum zu erhalten, können Sie diese Methode verwenden
%Vor% Option 2.
Sie können 2 Aufzählungen als
Übergeben Sie die Enums selbst als Werte. Dann verwenden Sie getSelectedItem , um das ausgewählte Objekt abzurufen , und führen Sie einen Test durch, um zu sehen, um welchen Typ sich das Objekt handelt.
Machen Sie den Rückgabetyp Ihrer Methode zu einem Objekt, nicht zu einer Aufzählung eines bestimmten Typs. Dies würde Ihr Problem beheben.
Ich denke jedoch, dass Ihre Herangehensweise falsch ist. Wenn ich Obst und Gemüse in einer Liste anzeigen und in Kategorien einteilen wollte, würde ich ein Objekt dafür erstellen, und ein Enum, um die Art des Essens so darzustellen:
%Vor% Und fügen Sie nur Food
-Elemente zu Ihrer JComboBox hinzu. Geben Sie Food
-Einträge zurück, wenn eine Auswahl getroffen wurde, und testen Sie mithilfe von FoodType
enum auf den Typ der Lebensmittel.
Es klingt wie das, was Sie suchen, ist die Fähigkeit, Vererbung auf enums
anzuwenden, aber dies ist in Java nicht möglich, da enums
implicity java.lang.Enum
erweitern und Java keine Mehrfachvererbung unterstützt.
Trotzdem glaube ich, dass verschachtelte Enums "könnte Ihr Problem lösen. Mit "verschachtelt" meine ich die Implementierung einer Schnittstelle, um das Problem der Mehrfachvererbung zu umgehen. Es gibt ein paar verschiedene Ansätze in den Antworten im Link, ich nehme an, einer von ihnen wird ausreichen.
Sie könnten Object
verwenden, anstatt explizit Fruit
oder Vegetables
Der Nachteil davon ist jedoch, dass Sie dann das Ergebnis vergleichen und an das Ergebnis anpassen müssen, was Sie wollen
%Vor%