2012-02-14 9 views
7

संभव डुप्लिकेट जावा में एक अंतरफलक पर एक सार विधि है:
Why would one declare a Java interface method as abstract?क्या

मैं हमारे EJB इंटरफेस में से एक में निम्न कोड मिल गया। क्या किसी को पता है कि इंटरफेस में सार क्या करता है? यदि आप भी कृपया समझा क्यों यह आवश्यकता हो सकती है या एक संदर्भ इसके बारे में पढ़ने के लिए प्रदान करते हैं = है)

@Local 
public interface IDomasOrderProcessor { 

    public abstract void executeOrderLines(List<OrderLine> lines); 
    public abstract void setupJob(List<OrderLine> lines); 
    public abstract void setupJob(OrderLine line); 
} 

उत्तर

16

abstract इस मामले में अनावश्यक है। interface पर परिभाषित सभी विधियां public और abstract परिभाषा के अनुसार हैं।

अंश Java Language Specification section 9.4

एक इंटरफेस के शरीर में हर विधि घोषणा परोक्ष सार है, इसलिए इसके शरीर हमेशा अर्धविराम का प्रतिनिधित्व करती है, एक ब्लॉक नहीं है।

इंटरफ़ेस के शरीर में प्रत्येक विधि की घोषणा निश्चित रूप से सार्वजनिक है।

+1

तो इस मामले में, आकस्मिक रूप से "सार्वजनिक" है। यह कहना है कि आप दोनों को छोड़ सकते हैं और यह वही काम करेगा। यह संभव है कि कोड मूल रूप से एक अमूर्त वर्ग था जिसे दोबारा प्राप्त किया गया। – Calum

+1

दरअसल, 'सार्वजनिक' भी। मैंने जवाब में कहा, क्योंकि मेरा पहला कुछ हद तक छोटा था। – Dev

6

दोनों public और abstract संशोधक इंटरफेस में निहित है और बचा जाना चाहिए।

5

एक इंटरफ़ेस में एक विधि परिभाषा के अनुसार सार्वजनिक और सार है। मैंने कुछ लोगों को यह कहते हुए सुना है कि वे महसूस करते हैं कि स्पष्ट रूप से उन्हें घोषित करना इससे स्पष्ट हो जाता है, लेकिन मेरे लिए यह अतिरिक्त शोर की तरह लगता है।

+0

यह निश्चित रूप से शोर है। (मैं वास्तव में जावा में वर्षों से प्रोग्रामिंग कर रहा था इससे पहले कि मुझे एहसास हुआ कि 'सार्वजनिक' अनावश्यक था।) –

2

प्रति this दस्तावेज़ सभी interface के तरीके के रूप में public और abstract है, इसलिए वहाँ interface अंदर स्पष्ट abstract विधि को परिभाषित करने के लिए कोई मतलब नहीं है।