যে কেউ মধ্যে ব্যবহারিক পার্থক্য সুস্পষ্ট ভাবে ব্যাখ্যা করতে পারবেন java.lang.annotation.RetentionPolicyধ্রুবক SOURCE, CLASSএবং RUNTIME?
"রক্ষণাবেক্ষণ টীকা" এর অর্থ কী তা আমিও ঠিক নিশ্চিত নই।
যে কেউ মধ্যে ব্যবহারিক পার্থক্য সুস্পষ্ট ভাবে ব্যাখ্যা করতে পারবেন java.lang.annotation.RetentionPolicyধ্রুবক SOURCE, CLASSএবং RUNTIME?
"রক্ষণাবেক্ষণ টীকা" এর অর্থ কী তা আমিও ঠিক নিশ্চিত নই।
উত্তর:
RetentionPolicy.SOURCE: সংকলনের সময় বাতিল করুন। এই টীকাগুলি সংকলনটি শেষ হওয়ার পরে কোনও অর্থবোধ করে না, তাই এগুলি বাইটকোডে লিখিত হয় না।
উদাহরণ:@Override,@SuppressWarnings
RetentionPolicy.CLASS: ক্লাস লোড চলাকালীন বাতিল করুন। বাইকোড-স্তরের পোস্ট-প্রসেসিং করার সময় দরকারী। কিছুটা আশ্চর্যজনকভাবে, এটি ডিফল্ট।
RetentionPolicy.RUNTIME: বাতিল করবেন না. টীকাগুলি রানটাইমে প্রতিবিম্বের জন্য উপলব্ধ হওয়া উচিত। উদাহরণ:@Deprecated
উত্স:
পুরানো ইউআরএল এখন শিকারী_মেটা মারা গেছে
এবং শিকারী-মেটা -2-098036 দ্বারা প্রতিস্থাপিত হয়েছে । এমনকি যদি এটি হ্রাস পায় তবে আমি পৃষ্ঠার চিত্রটি আপলোড করছি।
চিত্র (ডান ক্লিক করুন এবং 'নতুন ট্যাব / উইন্ডোতে চিত্র খুলুন' নির্বাচন করুন)

RetentionPolicy.CLASS
apt হয়েছে তবে এই ডকস.ওরাকল . com/ জাভ্যাস / / / ডকস / টেকনোটস / গাইডস / অ্যাপ্লিকেশন / দেখুন । প্রতিবিম্ব ব্যবহার করে টিকা আবিষ্কার করার জন্য ইন্টারনেটে একাধিক টিউটোরিয়াল রয়েছে। আপনি মধ্যে খুঁজছেন দ্বারা শুরু করতে পারেন java.lang.Class::getAnno*এবং একই পদ্ধতি java.lang.reflect.Methodএবং java.lang.reflect.Field।
শ্রেণি পচা সম্পর্কে আপনার মন্তব্য অনুসারে, আমি কীভাবে এটি কাজ করা উচিত বলে মনে করি:
RetentionPolicy.SOURCE: পচা ক্লাসে উপস্থিত হবে না
RetentionPolicy.CLASS: পচা ক্লাসে উপস্থিত হন, তবে প্রতিফলনের সাথে রান-টাইমে পরিদর্শন করা যায় না getAnnotations()
RetentionPolicy.RUNTIME: পচা ক্লাসে উপস্থিত হবে, এবং প্রতিফলনের সাথে রান-টাইমে পরিদর্শন করা যেতে পারে getAnnotations()
ন্যূনতম চলমান উদাহরণ
ভাষা স্তর :
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.SOURCE)
@interface RetentionSource {}
@Retention(RetentionPolicy.CLASS)
@interface RetentionClass {}
@Retention(RetentionPolicy.RUNTIME)
@interface RetentionRuntime {}
public static void main(String[] args) {
@RetentionSource
class B {}
assert B.class.getAnnotations().length == 0;
@RetentionClass
class C {}
assert C.class.getAnnotations().length == 0;
@RetentionRuntime
class D {}
assert D.class.getAnnotations().length == 1;
}
বাইটকোড স্তর : ব্যবহার করে javapআমরা লক্ষ্য করি যে Retention.CLASSটীকাযুক্ত শ্রেণি একটি রানটাইম ইনভিজিবল শ্রেণীর বৈশিষ্ট্য পেয়েছে :
#14 = Utf8 LRetentionClass;
[...]
RuntimeInvisibleAnnotations:
0: #14()
যখন Retention.RUNTIMEটীকাটি একটি রানটাইমভিজিবল শ্রেণীর বৈশিষ্ট্য পায় :
#14 = Utf8 LRetentionRuntime;
[...]
RuntimeVisibleAnnotations:
0: #14()
এবং Runtime.SOURCEসটীক .classকোনো টীকা পাবেন না।
আপনার সাথে খেলতে গিটহাবের উদাহরণ ।
ধরে রাখার নীতি: একটি ধারণার নীতি নির্ধারণ করে যে কোন বিন্দুটিকে বাতিল করা হয়। এটি জাভা অন্তর্নির্মিত টীকাগুলি ব্যবহার করে নির্দিষ্ট করা হয়েছে: @Retention[সম্পর্কে]
1.SOURCE: annotation retained only in the source file and is discarded
during compilation.
2.CLASS: annotation stored in the .class file during compilation,
not available in the run time.
3.RUNTIME: annotation stored in the .class file and available in the run time.