2010-02-10 14 views
6

मैं कुछ कोड देख रहा हूं जहां क्लास लेवल एनोटेशन का उपयोग कुछ कक्षाओं में 'एड' गुणों के लिए किया जाता है, बाद में प्रतिबिंब का उपयोग करके इन गुणों का उपयोग और उपयोग किया जाता है।कक्षा स्तर एनोटेशन बनाम इंटरफेस

मेरा प्रश्न: इंटरफ़ेस का उपयोग करने के बजाय कक्षा में नए फ़ील्ड जोड़ने के लिए एनोटेशन का उपयोग करना उचित है। इसके लिए कुछ फायदे और कमी क्या हैं?

+0

मैं कक्षा में फ़ील्ड जोड़ने के लिए इंटरफेस का उपयोग करके क्या मतलब है इसके बारे में थोड़ा उलझन में हूं। क्या आपका मतलब विधियों और गेटर-सेटर विधियों को जोड़ने के लिए एनोटेशन का उपयोग करना है? – Uri

+2

क्या आप यहां स्निपेट भी साझा कर पाएंगे? यह आपके प्रश्न को समझने में निश्चित रूप से हमारी मदद करेगा। –

उत्तर

8

मुझे नहीं पता कि एनोटेशन कभी भी एक इंटरफ़ेस को प्रतिस्थापित करेगा, लेकिन मैं आकर्षण को देख सकता हूं। यह सब कार्यान्वयन पर निर्भर करता है हालांकि।

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

आप हो सकता है:

interface CrudDao<T> { 
    Serializable create(T t); 
    T read(Serializable id); 
    void update(T t); 
    void delete(T t); 
} 

यह एक बोझिल लागू करने के लिए अनुबंध होगा, और संभावना विधि श्रृंखलन के कुछ प्रकार उठाना होगा।

class SomeDao { 

    @Create 
    long create(SomeEntity e) { // code } 

    @Read 
    SomeEntity read(long id) { // code } 

    @Update 
    void update(SomeEntity e) { // code } 

    @Delete 
    void delete(SomeEntity e) { // code } 
} 

दोष यह है कि इसका इस्तेमाल करने की बोझिल होगा:

class CrudFactory { 
    long create(Class clazz, Object obj) { 
     // loop through methods 
     // find method with @Create 
     // call method 
    }  
} 

इस उदाहरण में एनोटेशन overkill को अधिकांश समय हो सकता है, IMO

इसके बजाय आप की तरह कुछ कर सकता है । स्पष्ट रूप से परिभाषित, अच्छी तरह से प्रलेखित अनुबंध के बारे में कुछ कहना है।

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