StackWalker API किसी भी मेथड के भीतर कार्यों को निष्पादित करने के लिए आसान फ़िल्टरिंग और लेज़ी एक्सेस की अनुमति देता है। यह जावा 9 में स्टैक ट्रेस जानकारी प्राप्त करने के लिए एक कुशल API है।
StackWalker API में तीन महत्वपूर्ण नई क्लास हैं: StackWalker, StackWalker.StackFrame और StackWalker.Option।
- StackWalker - यह StackWalker API में मुख्य क्लास है। हम StackWalker.forEach() मेथड का उपयोग करके स्टैक फ्रेम को ट्रैवर्स करते हैं और StackWalker.getCallerClass() मेथड को कॉल करके कॉलर क्लास को कुशल तरीके से प्राप्त करते हैं। हम StackWalker.walk() मेथड का उपयोग करके स्टैक ट्रेस के माध्यम से चलते हैं और स्टैक फ्रेम की स्ट्रीम पर एक फंक्शन लागू करते हैं।
- StackWalker.StackFrame - यह StackWalker का एक स्टेटिक नेस्टेड क्लास है और StackWalker द्वारा लौटाए गए मेथड इनवोकेशन को दर्शाता है। इसमें दिए गए स्टैक फ्रेम जानकारी तक पहुंचने के लिए मेथड हैं जैसे getDeclaringClass(), getLineNumber() आदि।
- StackWalker.Option - यह StackWalker का एक स्टेटिक नेस्टेड क्लास है और स्टैक वॉकर के लिए विकल्प प्रदान करता है जब हम StackWalker.getInstance() के माध्यम से एक इंस्टेंस बनाते हैं तो स्टैक फ्रेम जानकारी को कॉन्फ़िगर करने के लिए।
उदाहरण
import java.util.List;
import java.util.stream.Collectors;
public class StackWalkingTest {
public static void main(String args[]) {
final List stack = StackWalker.getInstance()
.walk(s -> s.collect(Collectors.toList()));
for(StackWalker.StackFrame sf : stack) {
System.out.println(sf.getClassName() + "::" + sf.getMethodName() + ":" + sf.getLineNumber());
}
}
}
आउटपुट
StackWalkingTest::main:6