যে কেউ মধ্যে ব্যবহারিক পার্থক্য সুস্পষ্ট ভাবে ব্যাখ্যা করতে পারবেন 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.