কম্পিউটার

জাভা 9 এ স্ট্যাকওয়াকার এপিআই ব্যবহার করে স্ট্যাক ফ্রেমগুলি কীভাবে ফিল্টার করবেন?


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

নিচের উদাহরণে, আমরা 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. ইয়ার এপিআই ক্লাস ব্যবহার করে অ্যান্ড্রয়েডে কীভাবে বছর পেতে হয়?

  3. কিভাবে আমরা জাভাতে সারি ব্যবহার করে একটি স্ট্যাক প্রয়োগ করতে পারি?

  4. জাভাতে একটি বেনামী অভ্যন্তরীণ শ্রেণী ব্যবহার করে একটি ইন্টারফেস কীভাবে বাস্তবায়ন করবেন?