बुला पर जावा एनोटेशन देखें चलो कहते हैं कि मैं इस तरह एक स्थिति करते हैं:विधि
public String method(String s) {
return stringForThisVisibility(s, EnumVisibility.PUBLIC);
}
और मैं इस तरह एक एनोटेशन के साथ इसे बदलना चाहते:
@VisibilityLevel(value = EnumVisibility.PUBLIC)
public String method(String s) {
return stringForThisVisibility(s);
}
यह एक बेहतर हो रहा है और अधिक स्पष्ट समाधान है, लेकिन मुझे किसी प्रकार के प्रतिबिंब के साथ @ दृश्यता स्तर के मूल्य को जानने के लिए stringForThisVisibility विधि की आवश्यकता है। क्या यह संभव है? क्या मैं स्ट्रिंग फॉर यह दृश्यता विधि विधि पर एनोटेशन देख सकता हूं?
मुझे पता है कि एकमात्र समाधान भी है। यह नहीं कि सभी परिस्थितियों में काम करने की गारंटी नहीं है: यदि क्लासलोडर जिसे कॉल किया गया क्लास लोड किया जाता है, उसे कॉलिंग क्लास (और उसके माता-पिता क्लासलोडर्स में से कोई भी नहीं) पता नहीं है, तो 'class.forName() 'पर कॉल विफल हो जाएगा। –
तो आप कहते हैं कि पहले समाधान से संतुष्ट होना बेहतर होगा ... – Fabio
यह तकनीक नाजुक है (क्या होगा यदि आपकी विधि को एनोटेटेड विधि से सीधे नहीं कहा गया था? आपको स्टैक के माध्यम से लूप करना होगा। अगर एनोटेशन एक सुपरक्लास विधि पर है और सीधे कॉलिंग विधि पर नहीं है? आपको सुपरक्लास पर लूप करना होगा ...) और यदि फिलिप सही है तो यह जटिल वातावरण (j2ee? osgi?) के लिए खराब हो सकता है। यह भी बहुत धीमी है। आप एक समाधान का चयन कर सकते हैं जो थ्रेडलोकल मार्कर का उपयोग करता है और विधि को कॉल करने से पहले मार्कर सेट करता है, लेकिन यह अजीब भी दिखाई देगा। हो सकता है कि आप वर्णन कर सकें कि आप वास्तव में एक सुरुचिपूर्ण समाधान करने की कोशिश कर रहे हैं – radai