2010-09-26 12 views
15

मैं अपने प्रोजेक्ट जो क्षेत्रों के साथ ही इस्तेमाल किया जाएगा के लिए एक कस्टम एनोटेशन बना दिया है, किपहुँच एनोटेट क्षेत्रों

@MyAnnotation int myVariable

है मैं एक वर्ग जो वेरिएबल के अनुसार कुछ कार्यों का निष्पादन के आरोप में होगा मूल्यों। परियोजना में एनोटेशन के साथ कक्षाओं की एक अनिश्चित संख्या है। मूल्यों तक पहुंचने के लिए मैं अपने एनोटेशन प्रोसेसर का उपयोग करके उन्हें कैसे एक्सेस कर सकता हूं?

मैं प्रत्येक वर्ग के बावजूद एनोटेटेड वेरिएबल्स की जांच कर सकता हूं, लेकिन मान को संशोधित नहीं कर रहा क्योंकि यह ऑब्जेक्ट नहीं है।

इसे कैसे करें इस पर कोई सुझाव?

अग्रिम धन्यवाद !! :)

+0

मैं भी एक [कड़ी] पाया (http://stackoverflow.com/questions/13875029/how-do-i-get-all-fields-and-properties-of-an-object- उन-एनोटेटेड-साथ-स्पेक) आपके प्रश्न – Fritz

+0

के समान मेरे पहले स्वीकृत उत्तर अभी भी उपलब्ध है (इस टिप्पणी को लिखने के समय) शीर्षक "[एनोटेशन कैसे काम करते हैं] (http://www.objectpartners.com/2010/08/06/कैसे करते हैं-एनोटेशन काम /) "। –

उत्तर

19
int getMyVariable(Foo foo) throws IllegalArgumentException, IllegalAccessException{ 
for(Field f:foo.getClass().getDeclaredFields()){ 
    /** 
    * Ensure the RetentionPolicy of 'MyAnnotation' is RUNTIME. 
    */ 
    if(f.isAnnotationPresent(MyAnnotation.class)){ 
    return f.getInt(foo); 
    } 
} 
return -1; 
} 
+0

फ़ील्ड खोजने के लिए अच्छा है, लेकिन कभी-कभी एनोटेशन एक्सेसर विधि पर होता है। – cosbor11

+0

निजी क्षेत्रों के बारे में क्या? मेरा मानना ​​है कि यह काम नहीं करता है ... –

+0

रेमी डी: निजी फ़ील्ड कोई समस्या नहीं है, आपको बस फ़ील्ड को कॉल करने की आवश्यकता है .setAccessible (true); –

संबंधित मुद्दे