2010-02-03 9 views
14

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

@MyLocalAnnotations 
@Override 
public method inheritedMethodHere (yadda yadda) 
    { 
    super.inheritedMethodHere(yadda yadda); 
    } 

क्या विधि को ओवरराइड किए बिना ऐसा करने का कोई तरीका है? यह स्थानीय एनोटेशन की आपूर्ति के लिए केवल एक विधि को ओवरराइड करने के लिए इस तरह के अपशिष्ट की तरह लगता है।

+0

मैं भी जोड़ने के लिए कारण है कि मैं पहली जगह में ठोस उपवर्गों में एनोटेशन बनाने के लिए आवश्यक है क्योंकि वे JAXB में JPA और तत्व के नाम में अलग तालिका नामों का उपयोग किया गया था चाहता था। इस मामले में सुपरक्लास भी सामान्य है। – HDave

उत्तर

9

दुर्भाग्यवश, अब आप जो कर रहे हैं उससे बेहतर तरीका नहीं है। जो भी आप वर्णन कर रहे हैं, उसे करने के लिए आपको विधि को ओवरराइड करना होगा, क्योंकि आपके जेपीए एनोटेशन को कंक्रीट क्लास के लिए विशिष्ट जानकारी की आवश्यकता होगी।

जेपीए एनोटेशन के साथ, आपके पास वास्तव में दो विकल्प होते हैं - आप विधियों को एनोटेट कर सकते हैं, या आप गुणों को एनोटेट कर सकते हैं। हमारी परियोजना पर हमने तरीकों के बजाय एनोटेटिंग गुणों पर मानकीकृत किया है, लेकिन यह आपकी मदद नहीं करेगा, क्योंकि गुण संभवतः कंक्रीट वर्ग का हिस्सा हैं। (यदि वे किसी भी तरह से सुपर-क्लास में साझा किए जाते हैं, तो आपको वास्तव में विधियों को एनोटेट करने और उन्हें ओवरराइड करने की आवश्यकता होगी)।

अपनी स्कीमा को देखे बिना सिफारिश करना मुश्किल है, लेकिन यदि आपकी इकाई वर्गों में इतनी आम बात है कि वे सुपर-क्लास में कई गुण साझा करते हैं - शायद वे एक ही टेबल में संग्रहीत हो सकते हैं, शायद अलग-अलग प्रकार कॉलम?

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

हमारी परियोजना पर हम कभी कभी संस्थाओं के लिए एक आम सुपर क्लास का उपयोग करते हैं, लेकिन यह संस्था के बारे में कुछ मेटा डेटा कैप्चर करता है - कुछ भी नहीं है कि हठ तर्क को प्रभावित करेंगे। इसलिए, अमूर्त वर्ग में कोई जेपीए एनोटेशन की आवश्यकता नहीं होती है (न ही वे समझ में आती हैं)।

+0

प्रतिक्रिया के माध्यम से इस अच्छी तरह से सोचा के लिए धन्यवाद। मेरे मामले में, इकाई वर्ग 50% समान और 50% अलग हैं !! मैं प्रदर्शन के लिए अलग-अलग तालिकाओं का उपयोग करना जारी रखूंगा और उपर्युक्त दृष्टिकोण का उपयोग करना जारी रखूंगा। मैं आम तौर पर एक्सेसर विधियों को कभी-कभी एनोटेट करता हूं (अक्सर नहीं) हमारे पास तर्क है। – HDave

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