Methode aus anderer Klasse benutzen


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Redfs

Grünschnabel
Vielleicht ist der Titel etwas unpassend, aber ich wusste nicht wie ich es sonst beschreiben soll. Ich erstelle meinen Code über das Programm IntelliJ IDEA Community Edition, falls es notwendig ist es zu wissen. Ich versuche aus Neugier und, weil ich etwas lernen möchte, ein Spiel zu programmieren. Falls der Code ein Problem sein sollte, tut es mir Leid, da ich noch ein Anfänger bin. Also mein Problem liegt dabei, dass ich eine Methode (.getRuestungswert()) aus einer anderen Klasse benutzen möchte. Die Methode ist an einem/r Object/ Klasse (Klasse Ruestung) gebunden. Dieses Object habe ich in einer HashMap mit dem Namen "ToolSlotHash" gespeichert. Diese HashMap steht in der Klasse ToolSlot.
Code:
private static HashMap<String, Object> ToolSlotHash = new HashMap<String, Object>(); //in Klasse Tool
Die HashMap besitzt die Schlüsselwörter "Ruestungs_Slot" und "Tool_Slot". Vorerst sind die beiden Slots mit null belegt. Das abzurufende Object, wenn der Slot belegt ist, liegt bei "Ruestungs_Slot" und kommt von der Klasse Ruestung. Die HashMap hab ich mit der Methode .getToolSlotRuestung() umgangen, sodass ein Object wiedergegeben wird.
Code:
public static Object getToolSlotRuestung() {
        return ToolSlotHash.get("Ruestungs_Slot");
        // in der Klasse Tool
    }
Die Klasse Ruestung hat die Methode .getRuestungswert(). In der Klasse Character versuche ich nun diese Methode von dem auf der HashMap abgespeicherten Object aufzurufen. Leider weiß ich nicht wie und ich hoffe jemand kann mir helfen.
Mein bisheriger Code:
Code:
public static void setRuestungwertmitRuestung() {
        if (isRuestungAn() && ToolSlot.getToolSlotRuestung() != null) {
            Object Ruestung = ToolSlot.getToolSlotRuestung();
            Ruestungswert =+ Ruestung.getRuestungswert(); //Code, welcher als falsch angesehen wird
            //Ruestungswert ist ein Int-Wert vom Character
        }
    } //in Klasse Character
Danke im Voraus für alle, die versuchen mir zu helfen. Ich hoffe, dass ich es nicht zu kompliziert geschildert habe.
Falls ich noch weitere Informationen geben soll, werde ich diese schnell geben.

Mfg
 
Zuletzt bearbeitet:

ComFreek

Mod | @comfreek
Moderator
//Code, welcher als falsch angesehen wird
Es gibt viele Fehlermeldungen. Bitte schreib das nächste Mal genau, welche auftaucht.

Ich hoffe, dass ich es nicht zu kompliziert geschildert habe.
Nichts für ungut, aber es ist für die meisten erfahreneren Programmier wahrscheinlich einfacher Code als Text (von einem Anfänger) zu lesen :) Poste doch einfach zumindest den Code der ganzen Datei, die du ausschnittsweise gezeigt hast.
 

Redfs

Grünschnabel
Der ganze Code wäre wahrscheinlich zu viel, weil da noch mehrere Klassen und Methoden dranhängen. Das sind auch die einzigen Klassen / Methoden, die mit diesem Problem zu tun haben.
Das Programm lässt sich noch nicht starten, da die Klassen später alle in das Spiel zusammengefügt werden, aber die Anmerkung der Software ist: "Cannot resolve method 'getRuestungswert' in 'Object'"
 
Zuletzt bearbeitet:

ComFreek

Mod | @comfreek
Moderator
Ah, jetzt habe ich genauer hingeschaut. Ja, auf einer Variable vom Typ Object kannst du freilich nur Object-Methoden aufrufen.
Du hast wahrscheinlich die Variable für deine HashMap misdesigned:
Code:
HashMap<String, Object> ToolSlotHash // aus deinem Code
Alles, was du aus dieser Map an Values herausbekommst, wird immer nur vom Typ Object zugreifbar sein.
 

Redfs

Grünschnabel
Wäre es möglich zwei Maps, welche jeweils für eine Klasse da sind, zu erstellen? Also codemäßig so:
Code:
private static HashMap<String, Ruestung> RuestungSlotHash = new HashMap<String, Ruestung>();
//und
private static HashMap<String, Tool> ToolSlotHash = new HashMap<String, Tool>();
Dann hätte ich die jeweiligen Methoden einer Klasse zur Verfügung, oder?

Edit: Habe es versucht und es scheint zu funktionieren. Danke @ComFreek
 
Zuletzt bearbeitet:

HonniCilest

Erfahrenes Mitglied
Am sinnigsten wäre es eigentlich ein Interface oder Superklasse zu definieren, welche den Zwecks beschreibt. Dann könntest du in der HashMap beide Typen speichern.
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge