2011-06-15 11 views
6

पर तत्व मान पढ़ें बिल्ड समय पर एनोटेशन तत्व के मान को पढ़ना संभव है? उदाहरण के लिए, अगर मैं निम्नलिखित एनोटेशन परिभाषित:एनोटेशन - बिल्ड-टाइम

public @interface State { 
    String stage(); 
} 

और मैं एक कक्षा में एक विधि व्याख्या करते हैं, तो जैसे:

public class Foo { 
    @State(stage = "build") 
    public String doSomething() { 
     return "doing something"; 
    } 
} 

मैं मूल्य की कैसे पढ़ सकते हैं @ एक एनोटेशन प्रोसेसर में निर्माण समय पर राज्य एनोटेशन तत्व 'मंच'? मैं एक प्रोसेसर के रूप में इस का निर्माण किया है:

@SupportedAnnotationTypes(value = {"State"}) 
@SupportedSourceVersion(SourceVersion.RELEASE_6) 
public class StageProcessor extends AbstractProcessor { 
    @Override 
    public boolean process(Set<? extends TypeElement> elementTypes, 
      RoundEnvironment roundEnv) { 
     for (Element element : roundEnv.getRootElements()) { 
       // ... logic to read the value of element 'stage' from 
       // annotation 'State' in here. 
     } 
     return true; 
    } 
} 
+0

यदि आपके पास एनोटेशन प्रोसेसर है तो आप केवल एपीटी (एनोटेशन प्रोसेसिंग टूल) चला सकते हैं, लेकिन मुझे लगता है कि सवाल यह है कि बिल्डिंग समय से आपका क्या मतलब है? क्या आपका मतलब है कि कोड संकलित करता है? क्या आप निर्माण प्रक्रिया के दौरान मतलब है? क्या आपको एक निश्चित निर्माण उपकरण (जैसे ग्रहण, चींटी, मेवेन इत्यादि) के लिए एपीटी का आह्वान करने में मदद की ज़रूरत है? निर्माण प्रक्रिया के दौरान – Pace

+0

। दूसरे शब्दों में, जब एनोटेशन प्रोसेसर चलाएगा। इसके अलावा, मुझे उपयुक्त उपकरण चलाने की आवश्यकता नहीं है क्योंकि मैं जावा 6 का उपयोग कर रहा हूं जिसमें एनोटेशन प्रोसेसिंग के लिए देशी समर्थन शामिल है। – Joeblackdev

उत्तर

5

नहीं सबसे अच्छा जवाब के रूप में मैं इस अपने आप को नहीं किया है, लेकिन के रूप में यह 3 घंटे हो चुके हैं कि मैं क्या मैं कर सकते हैं करेंगे देखकर। कोई भी विकल्प, किसी भी एनोटेशन प्रोसेसर कि उपलब्ध हैं संकलक खोज: एनोटेशन प्रसंस्करण के

अवलोकन

जब तक एनोटेशन प्रसंस्करण विकलांग -proc के साथ है। खोज पथ हो सकता है -प्रोसेसरपाथ विकल्प के साथ निर्दिष्ट; यदि यह नहीं दिया गया है, तो उपयोगकर्ता कक्षा पथ का उपयोग किया जाता है। प्रोसेसर सेवा प्रदाता-कॉन्फ़िगरेशन फ़ाइलों के नाम से
मेटा-आईएनएफ/सेवाएं/javax.annotation.processing.Processor खोज पथ पर स्थित हैं। ऐसी फाइलों को में किसी भी एनोटेशन प्रोसेसर का उपयोग करने के लिए नाम होना चाहिए, प्रति लाइन सूचीबद्ध करें। वैकल्पिक रूप से, प्रोसेसर -प्रोसेसर विकल्प का उपयोग करके स्पष्ट रूप से निर्दिष्ट किया जा सकता है।

तो यह है कि अगर आप अपनी टिप्पणी प्रोसेसर, एक प्रति पंक्ति के नाम सूचीबद्ध करता है कि आपके META-INF/services फ़ोल्डर में javax.annotation.processing.Processor नाम की एक फ़ाइल बनाने की आवश्यकता प्रतीत होता है।

संपादित करें: तो फिर मेरा मानना ​​है कि टिप्पणियां पढ़ने हेतु कोड कुछ जैसा होगा ...

for (Element element : roundEnv.getRootElements()) { 
     State state = element.getAnnotation(State.class); 
     if(state != null) { 
      String stage = state.stage(); 
      System.out.println("The element " + element + " has stage " + stage); 
     } 
    } 

एक एनोटेशन प्रोसेसर का एक वास्तविक दुनिया उदाहरण here पाया जा सकता है।

+0

खोदने के लिए धन्यवाद! मुझे आश्चर्य है कि मुझे अभी तक एक निश्चित उत्तर नहीं मिला है। मेरे पास चरणबद्ध सेटअप हैं जिन्हें आपने ऊपर उल्लिखित किया है। हालांकि मुझे वास्तव में क्या चाहिए, एनोटेशन तत्वों को पढ़ने का एक तरीका है। – Joeblackdev

+0

बस एनोटेशन के क्षेत्र तक सीधे पहुंचें। जैसे स्ट्रिंग चरण = state.stage(); –