Aufrufende Klasse ermitteln

normaler_spinner

Erfahrenes Mitglied
Hallo zusammen,

stehe gerade auf dem Schlauch und hab scheinbar nen Brett vorm Kopf. Habe eine Klassenstruktur: Klasse_A-->Klasse_B. Jetzt möchte ich von Klasse_B auf eine Methode der Klasse_A zugreifen ohne das ich der Klasse_B eine Referenz auf Klasse_A übergebe. Das ging doch irgendwie :confused:
 
Super heisßt die Referenz

public void toString() {
return super.toString() + "Ah jetzt kommts wieder... ";
}

;-)
 
Da hab ich mich wohl falsch ausgedrückt ... super nutze ich wenn Klasse_B von Klasse_A abgeleitet ist. In meinem Fall ist das aber nicht so.
 
Du hast zwei Instanzen A und B von verschiedenen Klassen. A hat eine Referenz auf B, B hat aber keine auf A. B soll aber eine Methode von A aufrufen.

Ich nehme weiter an, dass Du keine statischen Methoden, sondern Instanzmethoden meinst.


Da sehe ich keinen trivialen Weg. Man müsste den Heap abklappern, um festzustellen, wer alles das Objekt referenziert. Schwierig. Und was ist, wenn 5 Instanzen von A auf B zeigen? Welche Methode soll dann ausgeführt werden? Ich denke ohne Referenz wirst Du nicht weit kommen....

Gruß

Jo

P.S. Wenn Du doch einen Weg findest, wäre ich sehr gespannt!
 
Na dann wähle ich doch lieber den einfachen Weg, meinte nur mal hier im Forum etwas gelesen zu haben, dass es auch ohne die Referenz geht. Danke trotzdem ...
 
Hab ich ja auch schon daran gedacht, aber das nutze ich im Regelfall nur für bestimmte Ereignisse. Es geht mir ja nur darum diese Struktur aus dem Bild aufzubrechen. Das Model benötigt beide Klassen, die GP aber nur die RC
 

Anhänge

  • Diagramm.jpg
    Diagramm.jpg
    16,4 KB · Aufrufe: 288
Zuletzt bearbeitet:
Hallo,

auch wenn das Ziel dieses Threads scheinbar nicht daraus besteht die Aufrufende Klasse eines Methodenaufrufs (im Gegensatz zu dem was der Titel suggeriert) zu ermitteln geb ich trotzdem mal dafür ein kleines Beispiel:
Java:
/**
 * 
 */
package de.tutorials;

import sun.reflect.Reflection;

/**
 * @author Thomas.Darimont
 * 
 */
public class CallerClassExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        A.call(true);
        A.call(false);
    }

    static class A {
        static void call(boolean callOverB) {
            if (callOverB) {
                B.call();
            } else {
                C.call();
            }
        }
    }

    static class B {
        static void call() {
            C.call();
        }
    }

    static class C {
        public static void call() {
            // look up two levels in the call stack 
            Class<?> callerClass = Reflection.getCallerClass(2); 
            System.out.println(callerClass);
        }
    }
}

Ausgabe:
Code:
class de.tutorials.CallerClassExample$B
class de.tutorials.CallerClassExample$A

Dieser Mechanismus wird im JRE u.a. für Sicherheitschecks verwendet (ist die aufrufende Klasse eine com.sun.xxxx?)

Gruß Tom
 
Hallo Thomas,

fand meine Formulierung eigentlich tadellos :rolleyes: . Naja, auf jeden Fall hast du mein Problem erkannt und mir mit deinem Beitrag mal wieder geholfen :) Danke, das war genau das was ich gesucht habe.
 
Fast gut ... Ich frage jetzt in der Klasse GP die callerClass ab und bekomme meine ModelClass. Gibt es jetzt eine Möglichkeit die callerClass auf die ModelClass zu casten? Ich bekomme immer eine Fehlermeldung das die Umsetzung nicht möglich ist.
Das wäre jetzt aber schön um auf eine Methode in der ModelClass zugreifen zu können.
 
Zurück