So bestimmen Sie, wo die Methode aufgerufen wurde

9

Ich stelle eine API bereit und muss wissen, wo Methoden der API aufgerufen wurden. Ich könnte natürlich Reflektion oder den Thread Stacktrace verwenden, aber das würde eine Menge Laufzeitkosten beinhalten.

Ich brauche nicht den genauen Klassennamen, eine eindeutige Referenz pro Aufruf wäre ausreichend. In C würde ich normalerweise den Präprozessor verwenden, um __FILE__ und __LINE__ automatisch zum Methodenaufruf hinzuzufügen.

Gibt es in Java (neben der Codegenerierung) eine Methode, um eine eindeutige Anruferkennung mit geringen Laufzeitkosten zu erhalten?

    
ooxi 29.09.2016, 08:56
quelle

2 Antworten

3

Eine Lösung wäre, ein zwischengespeichertes Throwable zu haben, das übergeben wird.

%Vor%

Hinweis: Wenn sich die Methode, die diesen Aufrufer aufruft, ändert, wird nur die erste aufgezeichnet.

Es gibt kein Standardmuster und wenn Sie möchten, dass dies effizient ist, muss der Anrufer eine eindeutige ID übergeben. Das nächste, was Sie tun können, ist ein Lambda.

%Vor%

Sie können es so nennen

%Vor%

Dadurch wird für jede aufgerufene Stelle eine andere Klasse erstellt, auch wenn sie mehrmals in derselben Zeile erscheint. Es erstellt keinen Müll, da es jedes Mal das gleiche Objekt wiederverwendet. Sie könnten dies mit

kürzer machen %Vor%

und rufe

an %Vor%     
Peter Lawrey 29.09.2016, 09:14
quelle
1

Wenn etwas Asynchrones involviert ist, teilen Sie den Aufruf auf, und lassen Sie die API die ID zurückgeben.

%Vor%

Das Zurückgeben eines Ergebnisses (synchron) ist wahrscheinlich bei Ihrem Code nicht der Fall. Ihr Code wird das Ergebnis an anderer Stelle erhalten. Aber das könnte auch ein Ticketsystem sein.

    
Joop Eggen 29.09.2016 09:41
quelle

Tags und Links