Method Handles হল জাভার একটি শক্তিশালী ফিচার যা Java 7-এ java.lang.invoke প্যাকেজে যুক্ত করা হয়েছিল। এটি dynamic method invocation এর জন্য ব্যবহৃত হয় এবং reflection এর তুলনায় অধিক কার্যকর এবং দ্রুত। Method Handles রিফ্লেকশন ব্যবস্থার একটি উন্নত সংস্করণ, যা আপনাকে মেথড ইনভোকেশন করতে দেয়, কিন্তু বেশি পারফরম্যান্স এবং কম প্ল্যান টাইম ওভারহেড প্রদান করে।
Method Handles প্যাকেজটি MethodHandle ক্লাস ব্যবহার করে মেথড ইনভোকেশন সরাসরি করতে সাহায্য করে এবং এটি কম্পাইলার দ্বারা প্রি-কাম্পাইলড, যা সাধারণ রিফ্লেকশন পদ্ধতির তুলনায় বেশি দক্ষ।
MethodHandle কি?
MethodHandle একটি অবজেক্ট যা একটি মেথডের রেফারেন্স ধারণ করে এবং তা এক্সিকিউট করতে ব্যবহৃত হয়। এটি মূলত একটি FunctionPointer এর মতো কাজ করে, এবং এটি dynamic method invocation এবং dynamic lambda expressions এর জন্য ব্যবহৃত হতে পারে।
MethodHandle এর মাধ্যমে Direct Method Invocation:
MethodHandle ব্যবহার করে আপনি একটি নির্দিষ্ট মেথডকে রানটাইমে ইনভোকেশনের জন্য প্রস্তুত করতে পারেন এবং তা খুব দ্রুত গতিতে এক্সিকিউট করতে পারেন। এটি মেথডের এক্সিকিউশন টাইম কমিয়ে আনে এবং রিফ্লেকশন সিস্টেমের তুলনায় দ্রুত কাজ করে।
MethodHandle এর মাধ্যমে Method Invocation এর উদাহরণ:
উদাহরণ 1: MethodHandle এর মাধ্যমে মেথড ইনভোকেশন
import java.lang.invoke.*;
class MyClass {
public void sayHello(String name) {
System.out.println("Hello, " + name);
}
}
public class MethodHandleExample {
public static void main(String[] args) throws Throwable {
// MyClass এর ইনস্ট্যান্স তৈরি
MyClass myObject = new MyClass();
// MethodHandles.Lookup অবজেক্ট তৈরি
MethodHandles.Lookup lookup = MethodHandles.lookup();
// sayHello মেথডের MethodHandle তৈরি করা
MethodHandle methodHandle = lookup.findVirtual(MyClass.class, "sayHello", MethodType.methodType(void.class, String.class));
// মেথড কল করা
methodHandle.invoke(myObject, "John"); // Output: Hello, John
}
}
ব্যাখ্যা:
MethodHandles.lookup(): এটি একটিLookupঅবজেক্ট প্রদান করে যা আপনি যে ক্লাসের মেথডে অ্যাক্সেস করতে চান, তা খুঁজে পেতে সাহায্য করে।findVirtual(): এটি একটি method handle খুঁজে পেতে ব্যবহৃত হয়। এখানেfindVirtualমেথডটিMyClassক্লাসেরsayHelloমেথডটি খুঁজে পাচ্ছে এবংMethodTypeদ্বারা মেথডের আর্গুমেন্ট এবং রিটার্ন টাইপ সঠিকভাবে ব্যাখ্যা করছে।methodHandle.invoke(): এটি সরাসরি মেথডটি কল করতে ব্যবহৃত হয়। এখানেmyObjectপ্যারামিটার হিসেবে প্রেরিত হয়েছে এবংJohnআর্গুমেন্ট হিসেবে মেথডে পাঠানো হয়েছে।
MethodType:
MethodType হল একটি ক্লাস যা মেথডের আর্গুমেন্ট টাইপ এবং রিটার্ন টাইপের সিগনেচার ধারণ করে। এটি মেথডের signature কে নির্ধারণ করতে সাহায্য করে। উদাহরণস্বরূপ, MethodType.methodType(void.class, String.class) এটি নির্দেশ করে যে মেথডটি void টাইপের রিটার্ন করবে এবং একটি String আর্গুমেন্ট নেবে।
MethodHandle এর ফিচারসমূহ:
- Direct method invocation:
MethodHandleএকাধিক মেথড ইন্ডেক্সের কাজ সহজে করে, এবং কোনো অতিরিক্ত ভেরিফিকেশন ছাড়াই মেথড কল করতে পারে। - Performance: রিফ্লেকশন সিস্টেমের তুলনায় এটি দ্রুত এবং কম পারফরম্যান্স ওভারহেড দেয়।
- Flexibility: এটি আপনাকে dynamic method dispatch করতে সাহায্য করে, যা আপনি runtime এ নির্দিষ্ট মেথডের রেফারেন্স পান এবং সেই মেথডটি কল করেন।
- Low-Level Access:
MethodHandleকম লেভেলের এক্সিকিউশন এবং এক্সপ্রেশন ফাংশনালিটি প্রদান করে যা রিফ্লেকশনের তুলনায় দ্রুত এবং কার্যকর।
MethodHandle এবং Reflection এর পার্থক্য:
- Performance:
- Reflection: রিফ্লেকশন সিস্টেমের মাধ্যমে মেথড ইনভোকেশন ধীর হতে পারে কারণ এটি অনেক বেশি overhead তৈরী করে, যেমন type checking এবং security checks।
- Method Handle:
MethodHandleমেথড ইনভোকেশনকে সরাসরি এক্সিকিউট করে, কম্পাইলারের মাধ্যমে অপ্টিমাইজ করা হয় এবং এটি reflection এর তুলনায় অনেক দ্রুত।
- Type Safety:
- Reflection: টাইপ সেফটি (type safety) নিয়ে কিছু সমস্যা থাকতে পারে কারণ আপনি রানটাইমে ডাইনামিকভাবে মেথড কল করছেন।
- Method Handle:
MethodHandleটাইপ সেফ থাকে কারণ এটি কম্পাইল টাইমে মেথড সিগনেচারের তথ্য চেক করে এবং পরে সেটি ব্যবহার করে।
- Usage:
- Reflection: যখন আপনি রানটাইমে ক্লাস বা মেথড সম্পর্কে জানেন না, তখন reflection ব্যবহার করা হয়।
- Method Handle: যখন আপনার কাছে মেথডের সঠিক রেফারেন্স থাকে এবং আপনি কার্যকরভাবে মেথড কল করতে চান, তখন
MethodHandleব্যবহার করা হয়।
MethodHandle জাভার রিফ্লেকশন প্যাকেজের একটি আধুনিক এবং দ্রুত পদ্ধতি যা dynamic method invocation এর জন্য ব্যবহৃত হয়। এটি direct method invocation করার একটি কার্যকর উপায় প্রদান করে এবং reflection এর তুলনায় বেশি পারফরম্যান্স প্রদান করে। MethodHandle এর মাধ্যমে আপনি সহজেই মেথড কল করতে পারেন, এবং এটি টাইপ সেফ এবং উচ্চ কার্যক্ষমতা প্রদান করে।
Read more