Also noch einmal, sorry diese questian beantwortet werden könnten/fragte allready viel, aber ich bin nicht wirklich sicher, was ich fürÄnderung Art von Objekt je nach Methode Argumente
bin auf der Suche bin ich zur Zeit einen Mod machen für ein Spiel und müssen benutzerdefinierte Elemente registrieren, die ich erstellt habe. Ich habe benutzerdefinierte Klassen für jeden Elementtyp erstellt, die verschiedene Variablen enthalten, auf die ich zugreifen muss. Das Problem ist, die Klasse (n), von denen sie alle erben, haben diese Variablen/Daten nicht.
Mein erster Versuch war so etwas wie diese (pseudo code'ish)
public void addItem(Item itemc)
{
Object item = null;
if (itemc.getClass().equals(ItemTool))
item = (ItemTool) itemc;
if (itemc.getClass().equals(ItemFood))
item = (ItemFood) itemc;
.......etc..........
registerItem(item,item.name);
registerItemRenderer(item,item.meta,item.model);
}
Aber das funktioniert nicht und ich erhalte eine Fehlermeldung, Punkt (behandelt als Objekt als initialisiert) nicht über diese Mitglieder .
Im Moment habe ich nur die Methode addItem überladen, um jede benutzerdefinierte Elementklasse zu akzeptieren (über 10 atm), aber das ist nicht wirklich das, was ich will.
Gibt es eine Möglichkeit, den Typ eines Objekts in jede Klasse zu ändern, die ich als Argument übergeben werde, und dann damit arbeiten?
Da ich das eigentlich Spiel-Dateien nicht ändern kann (das ist die Item-Klasse gehört) Ich kann keine Schnittstelle für Artikel erstellen. Ich könnte möglicherweise die Item-Klasse klonen und die Schnittstelle implementieren, aber da Item ziemlich "weit unten" in der Vererbung ist, müsste ich viele andere Klassen klonen, was nicht das ist, was ich will erste Methode - die immer noch ziemlich "hässlich" ist, aber es funktioniert. Danke –
Wenn du die Spieldateien nicht ändern kannst, könntest du zumindest ein neues 'GameItem' erstellen, das Elemente kapselt, wenn du ein Verhalten basierend auf der' Item' Klasse in mehr Situationen als nur dem oben genannten senden musst "Adapter" -Muster. – Smutje