साथ प्रतिबिंब के साथ रन-टाइम में निरीक्षण किया जा सकता है मिनिमल runnable उदाहरण
भाषा स्तर:
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;
}
Bytecode स्तर: का उपयोग कर javap
हम देख सकते हैं कि Retention.CLASS
एनोटेट वर्ग एक RuntimeInvisible वर्ग विशेषता हो जाता है: Retention.RUNTIME
एनोटेशन एक RuntimeVisible वर्ग विशेषता हो जाता है
#14 = Utf8 LRetentionClass;
[...]
RuntimeInvisibleAnnotations:
0: #14()
जबकि:
#14 = Utf8 LRetentionRuntime;
[...]
RuntimeVisibleAnnotations:
0: #14()
और Runtime.SOURCE
एनोटेटेड .class
कोई एनोटेशन नहीं मिलता है।
आप के साथ खेलने के लिए Examples on GitHub।
स्रोत
2015-05-04 15:02:16
प्रलेखन (http://java.sun.com/j2se/1.5.0/docs/api/java/lang/annotation/RetentionPolicy.html) बहुत स्पष्ट है। –
हाँ मैं पहले ही पढ़ चुका हूं लेकिन मैं अभ्यास में समझ में नहीं आता कि यह कैसे काम करता है। वास्तव में अगर मैं 'इस वाक्यांश' की कोशिश: "" "" एनोटेशन संकलक द्वारा वर्ग फ़ाइल में दर्ज हो रहे हैं लेकिन रन टाइम पर वीएम द्वारा बनाए रखा होने की जरूरत नहीं।"" और फिर एक डिकंपिल्ड क्लास खोलें जहां मैंने प्रतिधारण नीति क्लास के साथ एनोटेशन लगाया है मुझे कुछ भी नहीं मिला है ... – xdevel2000
फिर आपका डिकंपलर एनोटेशन का समर्थन नहीं करता है। जेडी-गुई ठीक काम करता है। – musiKk