| 

.NET C# Java Javascript Exception

1
Wie kann ich herausfinden, welche Klasse meine Methode aufgerufen hat?
Meine Methode soll je nach aufrufender Klasse unterschiedlich reagieren; genauer gesagt sollen unterschiedliche Informationen über die aufrufende Klasse ausgegeben werden
News:
06.07.2011
HunnyBear 41 1 2
Der Anwendungsfall würde mich interessieren.
oopexpert 06.07.2011
3 Antworten
3
Hallo,

eine Klasse kann gar keine Methode aufrufen. Nur Methoden können Methoden aufrufen (und Eigenschaften zählen im weitesten auch zu Methoden get/set).

Auch wenn das Vorhaben nicht sinnvoll ist - außer du implementierst einen Debugger, o.ä. - kann diese Informatoin über den StackFrame ermittelt werden.

Überdenke aber deinen Entwurf. Eventuell ist Polymorphie schon die bessere Lösung.

mfG Gü
06.07.2011
gfoidl 9,4k 3 5
Stimme dir zu. Da stimmt etwas mit dem Design nicht.
oopexpert 06.07.2011
Danke. Interessiert ist nur bei Frage taucht jetzt Java Debug auf. Das war vorher nicht so, oder habs ich nur übersehen :-)
gfoidl 06.07.2011
0
Hallo HunnyBear,

mit Reflection ist zwar ziemlich viel möglich.
Aber das geht AFAIK nicht.

Denn du hast in deiner Methode keinerlei Referenz auf die aufrufende Klasse.
Und das ist im Sinne der Objektorientierung auch gut so.
Das Unterschiedlich Reagieren ist meiner Meinung nicht gut. Weil damit hat man eine Methode die in irgendwelche Sonderfällen auf eine andere Weise reagiert.
Für einen Aussenstehenden ist die aber total unverständlich

Gruß
Michael
06.07.2011
michlG 1,7k 1 5
0
Zuerst und vor allem möchte ich mich den Forums-Kollegen anschließen, die nach dem konkreten Anwendungsfall fragen, dem eigentlich dahinterstehenden Problem also, und die darauf hinweisen, dass der Entwurf möglicherweise nicht optimal ist.

Falls es für Deine Methode tatsächlich wesentlich ist, den Typ des Aufrufers zu kennen, käme auch eine sehr simple und pragmatische Lösung in Betracht: Du machst diese Abhängigkeit explizit und forderst eine Referenz auf den Aufrufer per Parameter.

public void myMethod(Class<?> caller, int someParam) {
//irgendetwas mit someParam tun, abhängig von caller
}

...

someReference.myMethod(this.getClass(), 42);


Vorteile:

  • Ziemlich einfacher und vermutlich gegenüber eine Reflection- bzw. StackFrame-Lösung auch schnellerer Code.
  • Weniger "magic", der Nutzer der Methode sieht, dass ihre Semantik möglicherweise von einem Typ abhängt.


Nachteile:

  • Wer es darauf anlegt oder schlicht nicht versteht, kann "schummeln" bzw. einen falschen Typ übergeben.
  • Funktioniert nicht, wenn Du mit deiner Methode ein Interface implementieren oder eine Methode überschreiben willst, die Du nicht ändern kannst.
07.07.2011
Matthias Hlawatsch 13,2k 4 9

Stelle deine Java-Frage jetzt!