জাভা রিফ্লেকশন প্যাকেজ (java.lang.reflect) ব্যবহার করে আপনি Annotations (এনোটেশন) অ্যাক্সেস এবং ম্যানিপুলেট করতে পারেন, যা কোডের মধ্যে অতিরিক্ত মেটাডেটা সংরক্ষণ করার জন্য ব্যবহৃত হয়। Annotations ক্লাস, মেথড, ফিল্ড এবং কনস্ট্রাক্টরের উপর অ্যাপ্লাই করা হতে পারে। রিফ্লেকশন ব্যবহার করে আপনি এই এনোটেশনগুলিকে রানটাইমে অ্যাক্সেস করতে পারেন।
এখানে Method, Field, এবং Class-এর উপর এনোটেশন অ্যাক্সেস করার প্রক্রিয়া আলোচনা করা হবে।
1. Class-এ এনোটেশন অ্যাক্সেস করা
ক্লাসের উপর অ্যাপ্লাই করা এনোটেশন অ্যাক্সেস করতে getAnnotations() বা getDeclaredAnnotations() মেথড ব্যবহার করা হয়।
getAnnotations():
- এটি ক্লাসের সমস্ত রানটাইম এনোটেশন ফেরত দেয়, যেগুলি
@Retention(RetentionPolicy.RUNTIME)দ্বারা চিহ্নিত।
getDeclaredAnnotations():
- এটি শুধু ক্লাসের ডিক্লেয়ারড এনোটেশন ফিরিয়ে আনে, এর মধ্যে তার প্যারেন্ট ক্লাসের এনোটেশন অন্তর্ভুক্ত নয়।
উদাহরণ:
import java.lang.annotation.*;
import java.lang.reflect.*;
@Retention(RetentionPolicy.RUNTIME)
@interface MyClassAnnotation {
String description();
}
@MyClassAnnotation(description = "This is a custom class annotation")
class MyClass {
}
public class ReflectionExample {
public static void main(String[] args) throws Exception {
Class<?> cls = MyClass.class;
// ক্লাসের এনোটেশন পাওয়া
MyClassAnnotation annotation = cls.getAnnotation(MyClassAnnotation.class);
// এনোটেশনের মান
if (annotation != null) {
System.out.println("Annotation description: " + annotation.description());
}
}
}
Output:
Annotation description: This is a custom class annotation
2. Field-এ এনোটেশন অ্যাক্সেস করা
একটি ক্লাসের ফিল্ডে প্রয়োগ করা এনোটেশন অ্যাক্সেস করতে, getDeclaredField() মেথডের মাধ্যমে ফিল্ডটি পাওয়ার পর getAnnotation() মেথড ব্যবহার করতে হবে।
উদাহরণ:
import java.lang.annotation.*;
import java.lang.reflect.*;
@Retention(RetentionPolicy.RUNTIME)
@interface MyFieldAnnotation {
String value();
}
class MyClass {
@MyFieldAnnotation(value = "Field Annotation Example")
private String myField;
}
public class ReflectionExample {
public static void main(String[] args) throws Exception {
Class<?> cls = MyClass.class;
// ফিল্ড পাওয়া
Field field = cls.getDeclaredField("myField");
// ফিল্ডের এনোটেশন পাওয়া
MyFieldAnnotation annotation = field.getAnnotation(MyFieldAnnotation.class);
// এনোটেশনের মান
if (annotation != null) {
System.out.println("Field Annotation value: " + annotation.value());
}
}
}
Output:
Field Annotation value: Field Annotation Example
3. Method-এ এনোটেশন অ্যাক্সেস করা
মেথডের উপর প্রয়োগ করা এনোটেশন অ্যাক্সেস করতে getDeclaredMethod() মেথড ব্যবহার করে মেথডটিকে পেয়ে getAnnotation() বা getAnnotations() মেথড ব্যবহার করা হয়।
উদাহরণ:
import java.lang.annotation.*;
import java.lang.reflect.*;
@Retention(RetentionPolicy.RUNTIME)
@interface MyMethodAnnotation {
String action();
}
class MyClass {
@MyMethodAnnotation(action = "Method Annotation Example")
public void myMethod() {
System.out.println("This is a method.");
}
}
public class ReflectionExample {
public static void main(String[] args) throws Exception {
Class<?> cls = MyClass.class;
// মেথড পাওয়া
Method method = cls.getDeclaredMethod("myMethod");
// মেথডের এনোটেশন পাওয়া
MyMethodAnnotation annotation = method.getAnnotation(MyMethodAnnotation.class);
// এনোটেশনের মান
if (annotation != null) {
System.out.println("Method Annotation action: " + annotation.action());
}
}
}
Output:
Method Annotation action: Method Annotation Example
সংক্ষেপে:
- Class-এর এনোটেশন:
cls.getAnnotation(Annotation.class)ব্যবহার করে ক্লাসের উপর প্রয়োগ করা এনোটেশন অ্যাক্সেস করা যায়।cls.getAnnotations()বাcls.getDeclaredAnnotations()ব্যবহার করে সমস্ত এনোটেশন পাওয়া যায়।
- Field-এর এনোটেশন:
field.getAnnotation(Annotation.class)ব্যবহার করে ফিল্ডের উপর প্রয়োগ করা এনোটেশন অ্যাক্সেস করা হয়।
- Method-এর এনোটেশন:
method.getAnnotation(Annotation.class)ব্যবহার করে মেথডের উপর প্রয়োগ করা এনোটেশন অ্যাক্সেস করা হয়।
পদ্ধতি:
getAnnotation()মেথড: শুধুমাত্র সেই এনোটেশন ফিরিয়ে দেয় যা রানটাইম-এ বিদ্যমান।getAnnotations()এবংgetDeclaredAnnotations()মেথড: একাধিক এনোটেশন পাওয়া যায়, যেখানে প্যারেন্ট ক্লাসের এনোটেশনও অন্তর্ভুক্ত থাকতে পারে (এই দুটি মেথড রানটাইম এনোটেশনগুলিকে অ্যাক্সেস করার জন্য ব্যবহৃত হয়)।
এনোটেশনগুলির মাধ্যমে আপনি কোডে অতিরিক্ত মেটাডেটা রাখতে পারেন, যা রানটাইমে রিফ্লেকশন ব্যবহার করে অ্যাক্সেস করা সম্ভব। Method, Field, এবং Class এ এনোটেশন অ্যাক্সেস করার মাধ্যমে আপনি কোডের মধ্যে আরও বেশি ফ্লেক্সিবিলিটি এবং ডাইনামিক আচরণ আনতে পারেন।
Read more