Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

Java 9 में StackWalker API का उपयोग करके स्टैक फ्रेम्स को कैसे फ़िल्टर करें?

StackWalker API फ़िल्टरिंग

StackWalker API प्रोग्राम के निष्पादन के दौरान स्टैक ट्रेस में जानकारी की एक स्ट्रीम प्रदान करता है। इस API को पूरे स्टैक का स्नैपशॉट कैप्चर करने के लिए एक वर्चुअल मशीन की आवश्यकता होती है और फ़िल्टरिंग उद्देश्यों के लिए तत्वों की एक सरणी लौटाता है। हमें walk() मेथड का उपयोग करके स्टैक फ्रेम्स को स्किप, ड्रॉप, और लिमिट करने की आवश्यकता है। हम filter() मेथड का उपयोग करके पहली मिलान वाली फ्रेम प्राप्त करने के लिए क्लास द्वारा स्टैक फ्रेम को फ़िल्टर भी कर सकते हैं, और सभी मिलान वाली फ्रेम्स प्राप्त कर सकते हैं।

उदाहरण: क्लास द्वारा फ़िल्टर करना

import java.lang.StackWalker.StackFrame;
import java.util.*;
import java.util.stream.*;

public class StackWalkerFilterTest {
    public static void main(String args[]) {
        final List<Class> filterClasses = new ArrayList<>();
        filterClasses.add(StackWalkerFilterTest.class);
        System.out.println("--- filter Frame by Class >> get first matching frame ---");
        Optional<StackFrame> frameByClass = findFrameByClass(filterClasses);
        System.out.println(frameByClass.toString());
        System.out.println("--- filter Frame by Class >> get all matching frames ---");
        List<StackFrame> framesByClass = findAllFramesByClass(filterClasses);
        System.out.println(framesByClass);
    }
    private static Optional<StackFrame> findFrameByClass(List<Class> filterClasses) {
        return StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE)
            .walk(s -> s.filter(f -> filterClasses.contains(f.getDeclaringClass())).findFirst());
    }
    private static List<StackFrame> findAllFramesByClass(List<Class> filterClasses) {
        return StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).walk(
            s -> s.filter(f -> filterClasses.contains(f.getDeclaringClass())).collect(Collectors.toList()));
    }
}

आउटपुट

--- filter Frame by Class >> get first matching frame ---
Optional[StackWalkerTest.findFrameByClass(StackWalkerTest.java:20)]
--- filter Frame by Class >> get all matching frames ---
[StackWalkerTest.findAllFramesByClass(StackWalkerTest.java:23), StackWalkerTest2.main(StackWalkerTest.java:15)]

StackWalker API स्टैक ट्रेस विश्लेषण के लिए शक्तिशाली स्ट्रीम-आधारित फ़िल्टरिंग प्रदान करता है।

  1. - Java Stack क्लास

    Java स्टैक एक लास्ट-इन, फर्स्ट-आउट डेटा संरचना है। स्टैक से हटाया गया पहला आइटम वह आइटम है जिसे स्टैक में अंतिम बार जोड़ा गया था। एक स्टैक डेटा संरचना नए आइटम्स को स्टैक के अंत में जोड़ती है। Java स्टैक्स Vector क्लास को एक्सटेंड करते हैं। प्रोग्रामिंग में, स्टैक डेटा संग्रहीत करने के लिए उपयोग की

  1. Android में Year API क्लास का उपयोग करके वर्ष कैसे प्राप्त करें? Android में Year API क्लास का उपयोग करके वर्ष कैसे प्राप्त करें?

    Year API के साथ वर्तमान वर्ष प्राप्त करना यह उदाहरण दर्शाता है कि Android में Year API क्लास का उपयोग करके वर्ष कैसे प्राप्त करें। चरण 1 - नया प्रोजेक्ट बनाएं Android Studio में एक नया प्रोजेक्ट बनाएं: File → New Project पर जाएं और सभी आवश्यक विवरण भरकर नया प्रोजेक्ट बनाएं। चरण 2 - लेआउट XML जोड़े

  1. - Java में एनोनिमस इनर क्लास का उपयोग करके इंटरफेस कैसे इम्प्लीमेंट करें?

    एक एनोनिमस इनर क्लास एक ऐसी क्लास है जिसका कोई नाम नहीं होता, हम इसे सीधे इंस्टेंशिएशन लाइन पर परिभाषित करते हैं। उदाहरण निम्न प्रोग्राम में, हम TutorialsPoint इंटरफेस के toString() मेथड को एनोनिमस इनर क्लास का उपयोग करके इम्प्लीमेंट कर रहे हैं, और इसके रिटर्न मान को प्रिंट कर रहे हैं। interface