জাভাতে কাস্টম অ্যানোটেশন তৈরি করা এবং রিফ্লেকশন ব্যবহার করে তা প্রোগ্রামে ব্যবহার করা একটি শক্তিশালী বৈশিষ্ট্য। অ্যানোটেশন এমন একটি ম্যাক্রো মেকানিজম, যা ক্লাস, ফিল্ড, মেথড, কনস্ট্রাক্টর ইত্যাদির জন্য মেটাডেটা প্রদান করে। এই অ্যানোটেশনগুলি রানটাইমে রিফ্লেকশন মাধ্যমে অ্যাক্সেস করা যায় এবং বিভিন্ন কার্য সম্পাদনের জন্য ব্যবহার করা হয়।
কাস্টম অ্যানোটেশন তৈরি করা
জাভাতে কাস্টম অ্যানোটেশন তৈরি করতে হলে আপনাকে @interface কিওয়ার্ড ব্যবহার করতে হবে। কাস্টম অ্যানোটেশন তৈরির সময় আপনি নির্দিষ্ট কিছু এলিমেন্ট বা ফিল্ড যুক্ত করতে পারেন, যেগুলোর ডিফল্ট মান হতে পারে অথবা এগুলি আর্গুমেন্ট হিসেবে পাস করা যেতে পারে।
কাস্টম অ্যানোটেশন তৈরি এবং ব্যবহার:
- কাস্টম অ্যানোটেশন তৈরি করা:
- প্রথমে আপনাকে অ্যানোটেশন ডিফাইন করতে হবে।
- অ্যানোটেশনটির মধ্যে এলিমেন্ট থাকতে পারে, যেমন
String name()বাint version()।
- রিফ্লেকশন মাধ্যমে অ্যানোটেশন ব্যবহার করা:
ClassবাMethodক্লাসেরgetAnnotation()মেথড ব্যবহার করে আপনি অ্যানোটেশন অ্যাক্সেস করতে পারবেন।- এর পরে, আপনি অ্যানোটেশনের ফিল্ডগুলোর মান বের করতে পারবেন।
উদাহরণ: কাস্টম অ্যানোটেশন তৈরি ও রিফ্লেকশন দ্বারা ব্যবহার
১. কাস্টম অ্যানোটেশন তৈরি:
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME) // এই অ্যানোটেশনটি রানটাইমে অ্যাক্সেসযোগ্য হবে
@Target(ElementType.METHOD) // শুধুমাত্র মেথডে ব্যবহারের জন্য
public @interface MyCustomAnnotation {
String description() default "No Description"; // ডিফল্ট মান সহ একটি এলিমেন্ট
int version() default 1; // ডিফল্ট মান সহ আরেকটি এলিমেন্ট
}
এখানে:
@Retention(RetentionPolicy.RUNTIME): এটি নির্দেশ করে যে অ্যানোটেশনটি রানটাইমে রিফ্লেকশন দ্বারা অ্যাক্সেস করা যাবে।@Target(ElementType.METHOD): এটি নির্দেশ করে যে এই অ্যানোটেশনটি শুধুমাত্র মেথডে ব্যবহার করা যাবে।
২. অ্যানোটেশন ব্যবহার:
public class MyClass {
@MyCustomAnnotation(description = "This is a custom annotation", version = 2)
public void myMethod() {
System.out.println("Inside myMethod!");
}
@MyCustomAnnotation(description = "Another method", version = 1)
public void anotherMethod() {
System.out.println("Inside anotherMethod!");
}
}
এখানে, myMethod() এবং anotherMethod() মেথডে কাস্টম অ্যানোটেশন ব্যবহার করা হয়েছে।
৩. রিফ্লেকশন দ্বারা অ্যানোটেশন অ্যাক্সেস করা:
import java.lang.reflect.*;
public class ReflectionExample {
public static void main(String[] args) {
try {
// MyClass ক্লাসের অবজেক্ট তৈরি
Class<?> cls = MyClass.class;
// ক্লাসের সকল মেথড অ্যাক্সেস করা
Method[] methods = cls.getDeclaredMethods();
for (Method method : methods) {
// মেথডে যদি MyCustomAnnotation থাকে
if (method.isAnnotationPresent(MyCustomAnnotation.class)) {
// অ্যানোটেশনটি পেতে
MyCustomAnnotation annotation = method.getAnnotation(MyCustomAnnotation.class);
// অ্যানোটেশনের ডাটা রিটার্ন করা
System.out.println("Method: " + method.getName());
System.out.println("Description: " + annotation.description());
System.out.println("Version: " + annotation.version());
System.out.println("---------------");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- অ্যানোটেশন ডিফাইন করা:
MyCustomAnnotationঅ্যানোটেশনটি@interfaceকিওয়ার্ড দিয়ে তৈরি করা হয়েছে, এবং@Retention(RetentionPolicy.RUNTIME)এবং@Target(ElementType.METHOD)ব্যবহার করা হয়েছে। - অ্যানোটেশন ব্যবহার করা:
myMethod()এবংanotherMethod()মেথডে কাস্টম অ্যানোটেশনটি ব্যবহার করা হয়েছে, যেখানেdescriptionএবংversionফিল্ডের মান প্রদান করা হয়েছে। - রিফ্লেকশন দিয়ে অ্যানোটেশন অ্যাক্সেস করা:
Method.isAnnotationPresent()ব্যবহার করে চেক করা হয়েছে যে মেথডে অ্যানোটেশনটি উপস্থিত আছে কিনা। যদি উপস্থিত থাকে, তবেgetAnnotation()ব্যবহার করে অ্যানোটেশনের তথ্য (যেমনdescriptionএবংversion) পাওয়া যায়।
আউটপুট:
Method: myMethod
Description: This is a custom annotation
Version: 2
---------------
Method: anotherMethod
Description: Another method
Version: 1
---------------
- কাস্টম অ্যানোটেশন তৈরি করার মাধ্যমে আপনি আপনার কোডে মেটাডেটা প্রদান করতে পারেন, যা পরবর্তীতে রিফ্লেকশন ব্যবহার করে অ্যাক্সেস করা যায়।
- রিফ্লেকশন মাধ্যমে আপনি রানটাইমে অ্যানোটেশনগুলোর মান এবং ব্যবহার বুঝতে পারেন এবং প্রয়োজনে ডাইনামিকভাবে কার্য সম্পাদন করতে পারেন।
- এই পদ্ধতিটি খুবই উপকারী, বিশেষ করে ফ্রেমওয়ার্ক বা লাইব্রেরি তৈরি করার সময়, যেখানে কোডের কার্যকারিতা পরিবর্তন করতে বা কনফিগারেশন তথ্য ধারণ করতে অ্যানোটেশন ব্যবহার করা হয়।
Read more