টীকা তৈরি করা একটি মোটামুটি সহজ প্রক্রিয়া, যদিও এটি কিছু নিয়ম দ্বারা সীমাবদ্ধ। এখন তারা কোন বাস্তব উদ্দেশ্য পরিবেশন করে তা আমাদের খুঁজে বের করতে হবে।

আসুন আমরা কীভাবে আমাদের নিজস্ব টীকা তৈরি করি তা স্মরণ করি।

আমরা একটি টীকা লিখব যা ক্লাস এবং পদ্ধতির জন্য এবং এতে কোডের লেখক এবং সংস্করণ সম্পর্কে তথ্য রয়েছে:


@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Info {
   String author() default "Author";
   String version() default "0.0";
}

এখানে আমাদের ক্লাস যা আমরা টীকা করেছি:


@Info
public class MyClass1 {
   @Info
   public void myClassMethod() {}
}
 
@Info(version = "2.0")
public class MyClass2 {
   @Info(author = "Anonymous")
   public void myClassMethod() {}
}
 
@Info(author = "Anonymous", version = "2.0")
public class MyClass3 {
   @Info(author = "Anonymous", version = "4.0")
   public void myClassMethod() {}
}

কিভাবে আমরা রানটাইমে এই ডেটা ব্যবহার করতে পারি?

টীকা থেকে মেটাডেটা বের করতে প্রতিফলন ব্যবহার করে। প্রতিফলন কি মনে করুন. প্রতিফলন রানটাইমে একটি প্রোগ্রাম সম্পর্কে ডেটা পরীক্ষা করার জন্য একটি প্রক্রিয়া। প্রতিফলন আপনাকে ক্ষেত্র, পদ্ধতি, ক্লাস কনস্ট্রাক্টর এবং ক্লাস সম্পর্কে তথ্য পেতে দেয়।

আমরা একটি ক্লাসে টীকা পড়ার জন্য প্রতিফলন ব্যবহার করব এবং আমরা যে তথ্য চাই তা প্রদর্শন করব।

আমরা মূল পদ্ধতিতে আমাদের ক্লাস থেকে ডেটা পড়ব :


import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Method;
 
public class Main {
   public static void main(String[] args) throws NoSuchMethodException {
       readMyClass(MyClass1.class);
       readMyClass(MyClass2.class);
       readMyClass(MyClass3.class);
   }
 
   static void readMyClass(Class<?> myClassObj) throws NoSuchMethodException {
       System.out.println("\nClass: " + myClassObj.getName());
       readAnnotation(myClassObj);
       Method method = myClassObj.getMethod("myClassMethod");
       readAnnotation(method);
   }
 
   static void readAnnotation(AnnotatedElement element) {
       try {
           System.out.println("Search for annotations in " + element.getClass().getName());
           Annotation[] annotations = element.getAnnotations();
           for (Annotation annotation : annotations) {
               if (annotation instanceof Info) {
                   final Info fileInfo = (Info) annotation;
                   System.out.println("Author: " + fileInfo.author());
                   System.out.println("Version: " + fileInfo.version());
               }
           }
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}

আমরা আমাদের ক্লাসের একটি উদাহরণ readMyClass পদ্ধতিতে পাস করি।

তারপর আমরা একটি ক্লাস এবং সেইসাথে একটি মেথড রিড অ্যানোটেশন পদ্ধতিতে পাস করতে পারি। আসুন এটি করি - আমরা একটি ক্লাস অবজেক্ট এবং একটি মেথড অবজেক্ট পাস করব। এটি একটি অবজেক্ট নেয় যা AnnotatedElement ইন্টারফেস প্রয়োগ করে। এটি আমাদের অবজেক্ট থেকে টীকাগুলির একটি তালিকা পেতে এবং তাদের প্রতিটি সম্পর্কে তথ্য পেতে দেয়।

নোট করুন যে টীকাটি আমাদের টীকা ধরনের: যদি (তথ্যের টীকা উদাহরণ) এর অন্তর্গত কিনা তা পরীক্ষা করার পরেই আমরা তথ্য পাই ।

প্রোগ্রাম আউটপুট আমাদের টীকা থেকে সম্পূর্ণ তথ্য দেয়:

ক্লাস: annotation.MyClass1
java.lang.Class এ টীকা অনুসন্ধান করুন
লেখক: লেখক
সংস্করণ: 0.0
java.lang.reflect.Method এ টীকা অনুসন্ধান করুন
লেখক: লেখক
সংস্করণ: 0.0

ক্লাস: annotation.MyClass2
java.lang এ টীকা অনুসন্ধান করুন। ক্লাস
লেখক: লেখক
সংস্করণ: 2.0
java.lang.reflect. পদ্ধতিতে টীকা অনুসন্ধান করুন
লেখক: বেনামী
সংস্করণ: 0.0

শ্রেণি: annotation.MyClass3
java.lang.Class এ টীকা অনুসন্ধান করুন
লেখক: বেনামী
সংস্করণ: 2.0
জাভাতে টীকা অনুসন্ধান করুন। lang.reflect.Method
লেখক: বেনামী
সংস্করণ: 4.0

এইভাবে, প্রতিফলনের সাহায্যে, আমরা মেটাডেটা বের করতে সক্ষম হয়েছি।

এখন সাধারণভাবে পঠনযোগ্যতা, গতি এবং গুণমান বৃদ্ধি সহ কোড উন্নত করতে টীকা ব্যবহার করার একটি উদাহরণ দেখি। Lombok আমাদের এই বিষয়ে সাহায্য করবে।

Lombok হল একটি কম্পাইলার প্লাগইন যেটি প্রচুর পরিমাণে কোড লুকিয়ে রাখতে এবং ভাষাকে প্রসারিত করতে টীকা ব্যবহার করে, যার ফলে উন্নয়ন সহজতর হয় এবং কিছু কার্যকারিতা যোগ করা হয়।

Lombok থেকে টীকাগুলির একটি উদাহরণ বিবেচনা করুন:

@স্ট্রিং toString() পদ্ধতির একটি বাস্তবায়ন তৈরি করে যা বস্তুর একটি পুঙ্খানুপুঙ্খ উপস্থাপনা নিয়ে গঠিত: ক্লাসের নাম, সমস্ত ক্ষেত্র এবং তাদের মান।

@ToString
public class Example
@EqualsAndHashCode ডিফল্টরূপে নন-স্ট্যাটিক এবং নন-স্ট্যাটিক ক্ষেত্র ব্যবহার করে সমান এবং হ্যাশকোডের বাস্তবায়ন তৈরি করে , কিন্তু কনফিগারযোগ্য। আরও বিশদ প্রকল্পের ওয়েবসাইটে পাওয়া যাবে । সেখানে আপনি একটি উদাহরণ পাবেন যা @EqualsAndHashCode ব্যবহার করে এবং টীকা ছাড়াই একটি আদর্শ বাস্তবায়ন দেখায়।
@গেটার / @সেটার ব্যক্তিগত ক্ষেত্রের জন্য গেটার এবং সেটার্স তৈরি করে।

@Getter 
@Setter 
private String name = "name";
@NonNul কোনো বস্তুকে ইনস্ট্যান্টিয়েট করার সময় ক্ষেত্রগুলি শূন্য হয় না বলে দাবি করা হয়। অন্যথায়, একটি NullPointerException নিক্ষেপ করা হয়।

public Example(@NonNull P p) {
 super("Hello");
 this.name = p.getName();
}

Lombok-এর আরও অনেক দরকারী টীকা আছে যেগুলো কম ব্যবহার করা হয়। আমরা এর সহজতম টীকা বিবেচনা করেছি। আপনি অফিসিয়াল ওয়েবসাইটে প্রকল্প সম্পর্কে আরও পড়তে পারেন ।