Angenommen, ich habe ein paar hundert verschiedene Elemente, die in einem Baum sortiert werden müssen, wie zum Beispiel eine Darstellung einer Ordnerstruktur.Wie erstellt man einen Enum-Style-Baum in Java?
a1
/| \
a2 b2 c2
/| |
a3 b3 c3
Diese Elemente werden auch statisch im Code definiert, da jeder manuell beschrieben werden muss.
Jetzt sagen Sie, dass ich auf diese Elemente meist über den Pfad im Baum zugreifen werde. Ich möchte es nicht mit String-Identifizierung implementieren, weil ich Probleme vermeiden möchte, die durch einfache Tippfehler in meinem Code verursacht werden (weil eine IDE nicht mit Tippfehlern der Struktur in Strings behilflich ist). Zum Beispiel wie folgt aus:
//Any typo inside the Strings would be ignored by the IDE.
Item item = tree.getChild("a1").getChild("a2").getChild("b3");
Oder:
Item item = tree.get("a1\\a2\\b3");
Mein Baumstruktur wird robuster, wenn ich einfach etwas tun kann, wie:
Item item = tree.a1.a2.b3;
ich dies durch die Implementierung einer Klasse erreichen könnte Für jeden einzelnen Artikel klingt das jedoch nach Overkill. Es muss einen einfacheren Weg geben?
Wenn ich dies mit nur einen einer dimentional Liste zu tun, kann ich Aufzählungen verwenden, um zu erreichen, was ich will:
public enum Item {
A1(1, "Description1"),
A2(2, "Description2"),
A3(3, "Description3");
int prop1;
String prop2;
Item(int prop1, String prop2) {
this.prop1 = prop1;
this.prop2 = prop2;
}
}
Item item = Item.A3;
So wäre es schön, wenn es eine ENUM-ähnliche Struktur für Bäume vorhanden ist. Ich habe hiarchical enums ausprobiert, aber der Weg zu einem Gegenstand in einer solchen Struktur scheint nicht abgeschlossen zu sein. Ich kann auf ein Item auf niedriger Stufe zugreifen, nur nach seinem Namen ohne den Rest seines Pfades.
Was stimmt nicht mit einer richtigen Klasse anstelle einer Enum? Alles, was Sie brauchen, sind zwei Klassen 'Tree' und' Child' und jedes 'Child' kann auf andere' Child' Klassen verweisen. –
"Item item = tree.a1.a2.b3" ist eher eine Kompilierzeit Sache und ich denke, dass Sie etwas dynamischeres wollen. Recht? –
@ cricket_007 * Ich könnte dies erreichen, indem ich für jedes einzelne Element eine Klasse implementiere, aber das klingt nach Overkill.Es muss einen einfacheren Weg geben? * –