2009-06-12 13 views
2

Gibt es einen schnellen Weg in Java, um den Nest/Recurse-Level zu erhalten?Java Stack/Nest Count

Ich schreibe eine Funktion, um eine Liste von Gruppen und ihren Mitgliedern zu erstellen. Die Mitglieder können auch Gruppen sein. Es ist möglich, dass wir mit einem Kreis von Gruppen/Mitgliedern enden könnten.

Ich möchte auf einer beliebigen Ebene anhalten.

Ich weiß, ich könnte nur eine Variable in einem höheren Bereich behalten oder einen inkrementierten Parameter übergeben, aber ich frage mich, ob es irgendwelche Stack-Level-Informationen sofort in Java gibt.

Ich nehme an, selbst wenn es ist, wäre der Trick zu wissen, auf welcher Ebene der Verschachtelung Sie beginnen möchten zu zählen. Also, der Punkt mag strittig sein, aber ich bin immer noch interessiert, wenn es eine schnelle Information darüber gibt.

Antwort

4

Keine Notwendigkeit für eine Throwable

nennen es nicht schnell sein, aber Sie können diese verwenden: http://java.sun.com/javase/6/docs/api/java/lang/Thread.html#getStackTrace()

StackTraceElement[] stack = Thread.currentThread().getStackTrace(); 

Sie müssen den Stack auf eine sinnvolle Art und Weise durchqueren, aber das sollte Ihnen den Anfang machen

+0

+1 Ich wusste, dass es einen anderen Weg gab, vergaß, was es war, danke, dass Sie darauf hingewiesen haben. –

+2

Thread.getStackTrace() erstellt trotzdem einen Throwable. Es könnte klarer sein, aber es ist nicht effizienter. –

+0

ah, hier war der ursprüngliche Thread, wo ich das http://stackoverflow.com/questions/965964/how-can-i-detect-if-a-java-class-is-called-by-its-own-own- sah main-or-from-another-clas –

1

Sie einen throwable machen können, wo Sie es wollen und und getStackTrace()

0

java.lang.Throwable hat die Methode getStackTrace() gibt Ihnen ein Array von StackTraceElements

1

Sie sollten das Problem der Erkennung von Zyklen direkt, nicht über eine willkürliche Grenze der Schachtelungstiefe adressieren. Behalten Sie eine Gruppe von Knoten bei, die Sie bereits besucht haben, und prüfen Sie, ob die aktuelle Gruppe darin enthalten ist.