Welche Klasse hat meine statische Methode aufgerufen?

8

Angenommen, ich hätte eine Java-Klasse mit einer statischen Methode, so:

%Vor%

Und weiter angenommen, dass Klasse A eine beliebige Anzahl von Unterklassen hat:

%Vor%

Betrachten Sie nun die folgenden Methodenaufrufe:

%Vor%

Meine Frage ist, wie kann die Methode foo() sagen, welche Klasse sie aufruft?

    
Slumberthud 12.11.2008, 03:57
quelle

3 Antworten

10

Das geht nicht, und das ist ein Teil des Problems mit statischen Methoden. Für den Compiler sind A.foo() und B.foo() genau dasselbe. Tatsächlich kompilieren sie auf denselben Bytecode. Sie können nicht ähnlicher werden.

Wenn Sie diese Art von Informationen wirklich benötigen, verwenden Sie einen Singleton und verwandeln Sie foo() in eine Instanzmethode. Wenn Ihnen die statische Syntax immer noch gefällt, können Sie eine Fassade A.foo() erstellen.

    
Daniel Spiewak 12.11.2008, 04:11
quelle
4

Obwohl Sie nicht herausfinden können, für welche Klasse die statische Methode aufgerufen wurde, ist es möglich herauszufinden, welche Klasse die Methode zur Laufzeit aufgerufen hat:

%Vor%

Ich sage nicht, dass dies eine gute Praxis ist, und es ist wahrscheinlich auch aus Performance-Sicht nicht großartig, aber es sollte funktionieren. Ich weiß nicht, ob dir das hilft ...

    
alasdairg 12.11.2008 12:39
quelle
3
%Vor%     
Georgy Bolyuba 12.11.2008 10:26
quelle

Tags und Links