Ich überprüfe einige Dokumentation auf Baumstrukturen und einige entsprechende Antworten auf das Thema hier auf stackoverflow.com, zum Beispiel this one und sie verwenden meist Rohtypen oder nur einen bestimmten Typ, der nicht arbeite für mein Problem. Ich habe eine Datei, die Meta als XML speichert, also war das Parsen kein Problem, aber ich brauche immer noch eine saubere Datenstruktur, um die tatsächlichen Informationen zu speichern.Vermeiden Sie die Verwendung von Prüfungen für instanzbezogene und rohe Typen
Der eigentliche Teil der Datei
<File>
<Meta>
<Generator>default</Generator>
<HeaderHash>110EbosCOut9ooqtIza4yHdT9xx+wUAp1VMfPqpQKwM=</HeaderHash>
<Color/>
<MemoryProtection>
<ProtectTitle>False</ProtectTitle>
<ProtectUserName>False</ProtectUserName>
<ProtectPassword>True</ProtectPassword>
<ProtectURL>False</ProtectURL>
<ProtectNotes>False</ProtectNotes>
</MemoryProtection>
<CustomIcons/>
<Binaries />
<CustomData/>
</Meta>
</<File>
Die Datenstruktur I mit kam
public class MetadataEntry {
public MetadataEntry() {
this.entity = new Entry();
}
private class Entry<T> {
private String name;
private T value;
private boolean isGroup;
private void setValue(T value) {
if (value instanceof String) {
this.value = value;
this.isGroup = false;
}
if (value instanceof MetadataEntry) {
if (isGroup()) {
((List<MetadataEntry>) this.value).add((MetadataEntry) value);
} else {
this.value = (T) new ArrayList<MetadataEntry>();
this.isGroup = true;
setValue(value);
}
}
}
}
private Entry entity;
public void setName(String name) {
this.entity.name = name;
}
public String getName() {
return this.entity.name;
}
public void setValue(String value) {
entity.setValue(value);
}
public void setValue(MetadataEntry value) {
entity.setValue(value);
}
public boolean isGroup() {
return this.entity.isGroup;
}
public List<MetadataEntity> getChildNodes() {
if (isGroup()) {
return (List<MetadataEntry>) this.entity.value;
}
return null;
}
public String getValue() {
if (!isGroup()) {
return (String) this.entity.value;
}
return null;
}
}
So könnte man vorschlagen, wie es sauberer zu machen, ohne rohe Typen mit wenn es eindeutig nicht notwendig ist und vermeiden Sie instanceof
? Oder noch besser, zeig mir bitte, wo du mehr darüber lesen kannst.
Argumentative Kommentare würden viel mehr geschätzt werden, anstatt Down-Voting, wenn aus irgendeinem Grund das Thema nicht von Interesse ist.
Ja, Sie sollten die Verwendung von 'instaceof' vermeiden, bis Sie beweisen können, dass es die beste Option ist. In diesem Fall ist es nicht, aber es scheint ein Nebeneffekt eines Designproblems zu sein. Können Sie den von Ihnen erwähnten Baum erklären und erklären, warum Sie eine Liste als potenziellen Wert haben? – ChiefTwoPencils