Java: Ordne jede Enumeration als Schlüssel zu

7

Wie kann ich eine Karte deklarieren, deren Schlüssel irgendeine Aufzählung haben kann?

Zum Beispiel habe ich zwei enum Obst und Gemüse.

Wie kann ich Map deklarieren, wo der Schlüssel sowohl Obst als auch Gemüse sein kann, aber nur Enumerationen, nicht Objekt?

Ich meine, etwas wie

%Vor%     
Pavel_K 05.08.2016, 05:11
quelle

2 Antworten

18
  1. Sie können java.lang.Enum als Schlüssel verwenden.

    %Vor%
  2. Erstellen Sie eine Schnittstelle, die in Ihren enums implementiert werden soll. Diese Methode gibt Ihnen mehr Kontrolle.

    %Vor%
afzalex 05.08.2016, 05:24
quelle
8

Sie müssen einen gemeinsamen Supertyp für Ihre beiden Enums haben, wenn Sie eine Map deklarieren möchten, in der zwei Arten von Instanzen der Schlüssel sein können. Eine Map kann nur einen Schlüsseltyp haben, aber wenn Sie einen Typ mit zwei Subtypen haben, ist das in Ordnung.

Sie können die Oberklasse für Enums nicht ändern (es ist immer java.lang.Enum ), aber Sie können sie Schnittstellen implementieren lassen. Was Sie also tun können, ist dies:

%Vor%

Die Frage ist: Was ist das geteilte Verhalten der Enums Fruit and Vegetable, das Sie in die Oberfläche einbeziehen können? Eine Schnittstelle ohne Verhalten ist ziemlich sinnlos. Du musst ständig instanceof checks und casts machen, um etwas als Fruit oder Vegetable zu behandeln.

Vielleicht brauchen Sie in Ihrem Fall eine einzige Aufzählung FruitOrVegetable - wenn Sie in der Lage sein möchten, sie austauschbar zu behandeln.

    
Erwin Bolwidt 05.08.2016 05:24
quelle

Tags und Links