2008-09-28 21 views
18

मैं जावा में इंटरफेस को एनोटेट करने में सक्षम होने के लिए उपयोग केस नहीं समझ सकता।एनोटेशन?

शायद कोई मुझे एक उदाहरण दे सकता है? EJB3 में

+8

जावास्क्रिप्ट लड़के को अपने जावा को समझने की कोशिश करने के लिए यह बहुत अच्छा है। –

उत्तर

20

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

+0

अधिक विशेष रूप से @ ट्रांसेक्शनल है, जिसे आप स्प्रिंग बीन क्लास, इसके किसी भी तरीके, या इंटरफ़ेस या इंटरफ़ेस विधियों पर लागू कर सकते हैं, जो क्लास लागू करता है, उस समय व्हाइवर सबसे अच्छा समझ में आता है। – skaffman

+3

@Alex सुनिश्चित नहीं है कि मैंने आपके उत्तर को गलत समझा है लेकिन [इस सवाल] के अनुसार (http://stackoverflow.com/questions/4745798/why-java-classes-do-not-inherit-annotations-from-implemented- इंटरफेस), एनोटेशन इंटरफेस से विरासत में नहीं हैं। क्या आप शायद इंटरफेस के बजाए सुपरक्लास को एनोटेट करने का जिक्र कर रहे हैं? –

1

अधिक एक उदाहरण है, लेकिन Local और Remote एनोटेशन। जावा दस्तावेज़ के अनुसार,

जब एक अंतरफलक पर इस्तेमाल किया, निर्दिष्ट करता है जिनकी एक स्थानीय व्यापार इंटरफेस के रूप में है कि इंटरफ़ेस।

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

0

आप इसे अनुबंध शैली प्रोग्रामिंग के लिए उपयोग कर सकते हैं - इंटरफ़ेस (प्रकार और विधि नाम) को परिभाषित करने से कुछ कदम आगे बढ़ें और कुछ अर्थशास्त्र (प्रकारों, पूर्व शर्त, पोस्टकंडिशन) की सामग्री को परिभाषित करें।

मैं कैसे एनोटेशन हालांकि जावा में काम की जांच करना होगा, लेकिन यह सामग्री आसानी से अजगर एनोटेशन के साथ किया जा सकता है ...

4

मैं findbugs बड़े पैमाने पर इस्तेमाल करते हैं। मुझे न्यूलिटी बाधाओं को बहुत उपयोगी निर्दिष्ट करने के लिए annotations का उपयोग मिलता है। यहां तक ​​कि यदि आप वास्तव में findbugs का उपयोग नहीं करते हैं, तो यह कोड का इरादा बहुत स्पष्ट बनाता है। उन टिप्पणियों में इंटरफेस पर कक्षाओं के रूप में उनकी जगह है। आप तर्क दे सकते हैं कि यह अनुबंध द्वारा प्रोग्रामिंग की तरह है ...

1

मैंने देखा है कि कई शोध उपकरण उपयोगकर्ताओं को प्रोटोकॉल, प्रतिबंध इत्यादि निर्दिष्ट करने के लिए विधि एनोटेशन का उपयोग करते हैं ताकि बाद में स्वचालित जांच की सुविधा मिल सके।

एनोटेशन के बाद क्या आप उन लोगों के साथ क्या कर सकते हैं निर्देशित नहीं करते, वहाँ कोई अच्छा कारण उन इंटरफेस टिप्पणी करने की अनुमति देने के लिए नहीं है।

4

भी उदाहरण बिना, यह समझाने के लिए स्पष्ट किया जाना चाहिए - इंटरफेस व्यवहार का वर्णन है, और इसलिए कर सकते हैं एनोटेशन, तो यह एक तार्किक मैच है उन्हें एक साथ रखा है।

0

जब JBoss के तहत अनुप्रयोगों को विस्तृत आप एक इंटरफेस पर टिप्पणियों का उपयोग कर सकते हैं JMX-कंसोल में एक सेवा निर्यात करने के लिए।

0

मैंने आरईएसटी इंटरफ़ेस को परिभाषित करते समय इसका उपयोग किया है। RESTeasy आप (इस उदाहरण में RESTInterfaceV1) व्याख्या किए गए इंटरफ़ेस का उपयोग करता है बाकी ग्राहक बनाने के लिए अनुमति देता है:

final RESTInterfaceV1 client = ProxyFactory.create(RESTInterfaceV1.class, "http://localhost:8080/rest"); 

हालांकि एनोटेशन उद्देश्य यह है कि वास्तव में REST इंटरफ़ेस लागू करता है पर दोहराया जाना है, इंटरफेस के लिए अलग से वितरित किया जा सकता जो जावा रीस्ट क्लाइंट बनाना चाहते हैं।

0

मैं @Immutable के साथ अपने इंटरफेस स्पष्ट रूप से उपवर्गों जो अस्थिरता एक वर्ग इंटरफेस होना चाहिए लागू करने अनुबंध के डेवलपर्स को इंगित करने के लिए निशान। जैसा कि गेल ने इसे अनुबंध द्वारा प्रोग्रामिंग किया है।

4

एक उपयोग केस जिसके साथ मैं काम कर रहा हूं वह जावैक्स/हाइबरनेट बीन सत्यापन है, हम इंटरफेस का उपयोग कर रहे हैं ताकि हम प्रत्येक विशिष्ट वर्ग पर सत्यापन को परिभाषित करने से बचने में मदद कर सकें।

public interface IUser { 
    @NotNull Long getUserId(); 
    ... 
} 

public class WebUser implements IUser { 
    private Long userId; 

    @Override 
    public Long getUserId(){ 
     return userId; 
    } 
    ... 
}