Java-তে Annotations এমন একটি বিশেষ ধরনের метাডেটা যা কোডের সাথে সম্পর্কিত অতিরিক্ত তথ্য প্রদান করে, তবে এগুলি রানটাইমে কার্যকরী হয় না, অর্থাৎ, এগুলি সাধারণত compile-time বা runtime এ প্রক্রিয়াজাত হয় না, বরং কেবল কোডের বর্ণনা হিসাবে কাজ করে। Custom Annotations ব্যবহার করে আপনি আপনার নিজের প্রয়োজনীয় metadata বা তথ্য সংজ্ঞায়িত করতে পারেন যা কোডের অংশ হিসেবে ব্যবহার করা যায়।
Java-তে Custom Annotations তৈরি করা এবং সেগুলি ব্যবহার করার জন্য কিছু স্টেপ অনুসরণ করা হয়।
১. Custom Annotation তৈরি করা
Java-তে Custom Annotation তৈরি করতে হলে প্রথমে @interface কীওয়ার্ড ব্যবহার করতে হয়। এটি Java 5 থেকে পরিচিত।
উদাহরণ: Basic Custom Annotation তৈরি করা
// Custom Annotation তৈরি করা
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
// RetentionPolicy.RUNTIME এর মানে হল যে এটি রানটাইমে অ্যাক্সেস করা যাবে
@Retention(RetentionPolicy.RUNTIME)
// Target(TYPE) এর মানে হল যে এটি ক্লাস, মেথড, বা ফিল্ডের উপর প্রযোজ্য হতে পারে
@Target(ElementType.METHOD)
public @interface MyCustomAnnotation {
String description() default "No description"; // একটি প্রপার্টি যুক্ত করা
}এখানে:
@Retention(RetentionPolicy.RUNTIME): এর মানে হল যে এই annotation শুধুমাত্র compile-time এর জন্য নয়, বরং রানটাইমে অ্যাক্সেসযোগ্য হবে।@Target(ElementType.METHOD): এটি বলে যে এই annotation শুধুমাত্র মেথডগুলিতে ব্যবহার করা যাবে।
২. Custom Annotation ব্যবহার করা
এখন, যে Annotation তৈরি করা হলো তা ব্যবহার করতে হবে। এটি সাধারণত একটি ক্লাস বা মেথডে প্রয়োগ করা হয়।
উদাহরণ: Custom Annotation ব্যবহার করা
public class CustomAnnotationExample {
@MyCustomAnnotation(description = "This is a custom annotation example")
public void myMethod() {
System.out.println("Method executed");
}
public static void main(String[] args) {
CustomAnnotationExample example = new CustomAnnotationExample();
example.myMethod();
// Reflection ব্যবহার করে Annotation এর তথ্য পড়া
try {
MyCustomAnnotation annotation = example.getClass()
.getMethod("myMethod")
.getAnnotation(MyCustomAnnotation.class);
if (annotation != null) {
System.out.println("Annotation Description: " + annotation.description());
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}Output:
Method executed
Annotation Description: This is a custom annotation exampleএখানে:
@MyCustomAnnotationব্যবহার করে আমরাmyMethod()মেথডে Custom Annotation যোগ করেছি।- Reflection ব্যবহার করে আমরা annotation এর মধ্যে থাকা
descriptionপ্রপার্টি অ্যাক্সেস করেছি।
৩. Custom Annotation এর বিভিন্ন ফিচার
(i) Default Value for Annotation Parameters
আপনার Custom Annotation এর মধ্যে প্যারামিটার দেয়া যেতে পারে, এবং আপনি চাইলে তাদের জন্য default values নির্ধারণ করতে পারেন।
উদাহরণ: Default Value
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyCustomAnnotation {
String description() default "Default description"; // Default value
}এখানে, description প্যারামিটারটির জন্য একটি default value দেয়া হয়েছে।
(ii) Annotation with Multiple Parameters
একটি Custom Annotation একাধিক প্যারামিটারও নিতে পারে।
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyCustomAnnotation {
String description() default "No description";
int version() default 1;
}এখন আপনি annotation এ version নামক একটি অতিরিক্ত প্যারামিটার ব্যবহার করতে পারবেন।
৪. Reflection ব্যবহার করে Annotation প্রাপ্তি
Java Reflection API ব্যবহার করে আপনি Runtime-এ Custom Annotations অ্যাক্সেস করতে পারেন এবং তাদের মানও বের করতে পারেন।
উদাহরণ: Reflection দ্বারা Annotation প্রাপ্তি
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
public class AnnotationReflectionExample {
@MyCustomAnnotation(description = "Custom annotation with version", version = 2)
public void annotatedMethod() {
System.out.println("This method is annotated");
}
public static void main(String[] args) throws Exception {
// Reflection ব্যবহার করে method এবং annotation প্রাপ্তি
Method method = AnnotationReflectionExample.class.getMethod("annotatedMethod");
// Annotation চেক করা
if (method.isAnnotationPresent(MyCustomAnnotation.class)) {
MyCustomAnnotation annotation = method.getAnnotation(MyCustomAnnotation.class);
System.out.println("Description: " + annotation.description());
System.out.println("Version: " + annotation.version());
}
}
}Output:
This method is annotated
Description: Custom annotation with version
Version: 2এখানে, Reflection ব্যবহার করে আমরা annotatedMethod() মেথডে থাকা MyCustomAnnotation অ্যাক্সেস করেছি এবং তার description ও version প্রপার্টির মান প্রিন্ট করেছি।
৫. Annotations এর Validity
Java Annotations এর Retention Policy নির্ধারণ করে যে, এটি compile-time, class-loading time বা runtime এ কবে পর্যন্ত অ্যাক্সেসযোগ্য থাকবে।
RetentionPolicy.SOURCE: এটি শুধুমাত্র কোড কম্পাইল করার সময় অ্যাক্সেসযোগ্য।RetentionPolicy.CLASS: এটি ক্লাস ফাইল তৈরির সময় অ্যাক্সেসযোগ্য, তবে রানটাইমে অ্যাক্সেসযোগ্য নয়।RetentionPolicy.RUNTIME: এটি রানটাইমে অ্যাক্সেসযোগ্য, যা রিফ্লেকশন দ্বারা ব্যবহার করা যায়।
৬. Custom Annotation এর ব্যবহারিক প্রয়োগ
- Validation: কাস্টম অ্যানোটেশন ব্যবহার করে ফিল্ড বা মেথডের ভ্যালিডেশন করা (যেমন @NotNull, @MaxLength ইত্যাদি)।
- Code Documentation: কাস্টম অ্যানোটেশন ব্যবহার করে কোডের বিশেষ উদ্দেশ্য বা মেটাডেটা প্রমাণ করা।
- Frameworks: স্প্রিং বা জ্যাকসন মত ফ্রেমওয়ার্কগুলোতে কাস্টম অ্যানোটেশন ব্যবহার করা হয়।
সারসংক্ষেপ
- Custom Annotations তৈরি করার জন্য
@interfaceকীওয়ার্ড ব্যবহার করতে হয়। - Annotations এ
defaultভ্যালু নির্ধারণ করা যেতে পারে। - Reflection ব্যবহার করে Custom Annotation এর মান পাওয়া যায়।
- RetentionPolicy এবং Target এর মাধ্যমে অ্যানোটেশন কিভাবে এবং কোথায় ব্যবহার করা যাবে তা নিয়ন্ত্রণ করা যায়।
Custom Annotations শক্তিশালী মেটাডেটা প্রদানকারী সরঞ্জাম, যা কোডের বর্ণনা ও লজিক্যাল অ্যাসোসিয়েশন এবং বৈশিষ্ট্যগুলোর জন্য ব্যবহৃত হয়।
Read more