কম্পিউটার টিউটোরিয়াল

জাভা ৯-এ StackWalker API ব্যবহার করে স্ট্যাক ফ্রেম ফিল্টার কীভাবে করবেন?

StackWalker API প্রোগ্রাম এক্সিকিউশনের সময় স্ট্যাক ট্রেসে ইনফরমেশন স্ট্রিম প্রদান করে। এই API একটি ভার্চুয়াল মেশিন রিকোয়ার করে পুরো স্ট্যাকের স্ন্যাপশট ক্যাপচার করতে এবং ফিল্টারিং উদ্দেশ্যে এলিমেন্টের অ্যারে রিটার্ন করতে। আমাদের walk() মেথড ব্যবহার করে স্ট্যাক ফ্রেম স্কিপ, ড্রপ, এবং লিমিট করতে হয়। আমরা filter() মেথড ব্যবহার করে ক্লাস দিয়ে স্ট্যাক ফ্রেম ফিল্টার করতে পারি ফার্স্ট ম্যাচিং ফ্রেম পাওয়ার জন্য, এবং সব ম্যাচিং ফ্রেম পাওয়ার জন্য।

উদাহরণ: StackWalker API ব্যবহার করে স্ট্যাক ফ্রেম ফিল্টার

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)]
  1. জাভা স্ট্যাক ক্লাস: সম্পূর্ণ গাইড

  2. এন্ড্রয়েডে Year API ক্লাস ব্যবহার করে বর্তমান বছর পাওয়ার পদ্ধতি

  3. জাভাতে কিউ ব্যবহার করে স্ট্যাক বাস্তবায়ন

  4. জাভাতে অ্যানোনিমাস ইনার ক্লাস ব্যবহার করে ইন্টারফেস ইমপ্লিমেন্ট করা