2008-12-18 16 views
7

मैं एक जावा एनोटेशन कि इस तरह दिखता है लिखा है एनोटेट किया जा रहा उत्पन्न कर सकता हूँ:मैं एक संकलन समय क्षेत्र के प्रकार के आधार त्रुटि

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.FIELD) // can I further limit this to only fields of type DomainObject? 
public @interface Owns { 
} 

संक्षेप में चारों ओर देखने के बाद मैं देख नहीं सकता है अगर वहाँ था एक इस एनोटेशन के उपयोग को और सीमित करने का तरीका ताकि एक विशिष्ट प्रकार के केवल फ़ील्ड को एनोटेट किया जा सके। यह एनोटेशन हमारे डोमेन के लिए कस्टम है और केवल हमारे बेस डोमेन ऑब्जेक्ट क्लास के उदाहरणों पर ही उपयोग किया जा सकता है।

क्या कोई यह जानता है कि संकलन समय पर इसे कैसे लागू किया जाए?

किसी भी मदद के लिए धन्यवाद!

उत्तर

8

आप annotation processor में एक त्रुटि उत्सर्जित कर सकते हैं (यदि आप जावा 5 समर्थन चाहते हैं तो आपको private API का उपयोग करना होगा)। आप Messager का उपयोग कर सकते हैं जो आपको ProcessorEnvironment से प्राप्त किया जाता है।

यह आपके उपकरण श्रृंखला पर कितना प्रभावी हो सकता है। यदि आप कमांड लाइन या बिल्ड स्क्रिप्ट के माध्यम से संकलित करने के लिए javac का उपयोग करते हैं तो यह ठीक होना चाहिए। ग्रहण के मेरे संस्करण में, मुझे परियोजना के लिए मैन्युअल रूप से एनोटेशन प्रोसेसर सक्षम करना था (प्रोजेक्ट सेटिंग्स के माध्यम से) और त्रुटियां कहीं भी स्पष्ट नहीं दिखाई दे रही थीं। (JDT एनोटेशन प्लगइन्स में एक्सटेंशन पॉइंट होते हैं जो आईडीई के साथ बेहतर एकीकरण की अनुमति देते हैं यदि आप कस्टम समर्थन प्रदान करना चाहते हैं।) यह आमतौर पर उपयोग किए जाने वाले टूल के साथ जांच करने के लिए भुगतान करेगा, खासकर यदि आपको मनमाने ढंग से विकास वातावरण का समर्थन करने की आवश्यकता है।

+0

यही वह जानकारी है जिसे मैं ढूंढ रहा था। मैं खोद दूंगा और देख सकता हूं कि यह चेक इन सार्थक जोड़ना उचित है या नहीं। धन्यवाद। –

0

मुझे विश्वास है कि यह संकलन समय पर लागू नहीं है - यदि आप यह सुनिश्चित करना चाहते हैं कि यह किसी भी अनुचित फ़ील्ड पर नहीं है, तो आपको रन/लोड-टाइम पर जांच करनी होगी।

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