यह पहेली मुझे। मेरे पास एक कस्टम एनोटेशन वाला एक वर्ग है और मुझे यह सत्यापित नहीं हो रहा है कि एनोटेशन मौजूद है। मुझसे यहां क्या गलत हो रहा है? अगर मैं MyOperationTest
चलाने (नीचे देखें), मैं एक परिणाम के रूप में इस मिल:एनोटेशन अदृश्य?
implements Library.Operation: true
has @Library.Marker: false
Tada!
Library.java:
package com.example.gotchas;
public class Library {
private Library() {}
public @interface Marker {}
public interface Operation {
public void execute();
}
}
MyOperation.java:
package com.example.gotchas;
@Library.Marker
public class MyOperation implements Library.Operation {
@Override public void execute() {
System.out.println("Tada!");
}
}
MyOperationTest। जावा:
package com.example.gotchas;
public class MyOperationTest {
static public void main(String[] args)
{
try {
Class<?> cl = Class.forName("com.example.gotchas.MyOperation");
boolean implementsLibraryOperation =
Library.Operation.class.isAssignableFrom(cl);
boolean hasLibraryMarker =
cl.isAnnotationPresent(Library.Marker.class);
System.out.println("implements Library.Operation: "
+implementsLibraryOperation);
System.out.println("has @Library.Marker: "+hasLibraryMarker);
if (implementsLibraryOperation)
{
Class<? extends Library.Operation> opClass =
cl.asSubclass(Library.Operation.class);
Library.Operation op = opClass.newInstance();
op.execute();
}
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (InstantiationException e) {
e.printStackTrace();
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
सहमत हुए। डिफ़ॉल्ट रूप से एनोटेशन रनटाइम के माध्यम से नहीं रखा जाता है ... संकलन के समय के बाद यह गिरा दिया जाता है। इसलिए जब आप अपना टेस्ट कोड चलाते हैं, तो एनोटेशन अब संकलित कोड का हिस्सा नहीं है। – RonU
[RetentionPolicy javadoc] में अधिक जानकारी (http://download.oracle.com/javase/6/docs/api/java/lang/annotation/RetentionPolicy.html): * RUNTIME - एनोटेशन को कक्षा फ़ाइल में दर्ज किया जाना है कंपाइलर द्वारा और रन टाइम पर वीएम द्वारा बनाए रखा गया, ** इसलिए उन्हें प्रतिबिंबित रूप से पढ़ा जा सकता है **। * – BalusC
आह! धन्यवाद!!!!! –