2014-04-02 9 views
6

में डिफ़ॉल्ट कन्स्ट्रक्टर जोड़ने का कोई तरीका है, अब डिफ़ॉल्ट विधियों को जावा 8 में जोड़ा गया है, क्या कोई डिफ़ॉल्ट कन्स्ट्रक्टर बनाने का कोई तरीका है?एक इंटरफ़ेस

मैं कोशिश की है: क्यों आवश्यक

public interface KadContent<T> 
{ 
    public default KadContent() 
    { 

    } 
... 

Netbeans

से त्रुटि <identifier> expected हो रही है? मैं वस्तुओं को क्रमबद्ध करने और "नो-Args कन्स्ट्रक्टर को आमंत्रित करने में असमर्थ .." त्रुटि प्राप्त करने के लिए जीसन का उपयोग कर रहा हूं और मुझे पता है कि मैं इस समस्या को जीसन के InstanceCreator का उपयोग कर हल कर सकता हूं। लेकिन क्या एक डिफ़ॉल्ट कन्स्ट्रक्टर बनाने का कोई तरीका है?

अद्यतन

मैं अपने खुद के कोड के साथ समस्या यह पाया है। मैं

gson.fromJson(new String(data), InterfaceName.class); 

बजाय

gson.fromJson(new String(data), ClassName.class); 

उपयोग कर रहा था तो भले ही उपवर्ग डिफ़ॉल्ट कंस्ट्रक्टर्स था, अक्रमांकन कोड गलत था। लेकिन डिफ़ॉल्ट कन्स्ट्रक्टर का सवाल अभी भी खड़ा है।

+6

इंटरफेस में कन्स्ट्रक्टर नहीं होना चाहिए। वे वस्तु निर्माण का हिस्सा नहीं हैं। उन्हें अनुबंध दो पक्षों के बीच रखना चाहिए। –

+2

डिफ़ॉल्ट कन्स्ट्रक्टर का क्या अर्थ होगा? इसका एक उदाहरण क्या होगा? –

+0

वैसे गसन को इसकी आवश्यकता है, इसके लिए मेरी ज़रूरत है। –

उत्तर

7

नहीं, यह संभव नहीं है।

  1. यह एक अंतरफलक
  2. आप एक इंटरफ़ेस को लागू करते हैं, तो वर्ग पहले से ही एक डिफ़ॉल्ट निर्माता (तर्क के बिना एक)

आप एक अमूर्त वर्ग का उपयोग कर सकते है में कोई मतलब नहीं है यदि आप चाहते हैं कि कार्यान्वयन में "डिफ़ॉल्ट कन्स्ट्रक्टर" हो। जब वस्तुओं चित्र में आते हैं और तथ्य यह है कि एक अंतरफलक के लिए एक वस्तु का निर्माण नहीं किया जा सकता ध्वनि है

+0

यदि जावा असली एम्स होगा, तो मैं "1." से सहमत होगा। लेकिन आप Enums का विस्तार नहीं कर सकते हैं, और यदि आप अपने स्वयं के enums में कुछ कार्यक्षमता जोड़ना चाहते हैं तो आप इंटरफेस के साथ अटक जाते हैं। और हाँ: तो एक डिफ़ॉल्ट कन्स्ट्रक्टर समझ में आता है। वैसे ही "यह कोई समझ नहीं आता" जब आप स्थैतिक तरीकों का उत्तराधिकारी बनना चाहते हैं, जो कुछ मामलों में बहुत अधिक समझ में आता है। – flaschenpost

+0

बिंदु यह है कि परिभाषा के अनुसार एक इंटरफेस कोई कार्यक्षमता प्रदान नहीं करता है। बेशक, यह डिफ़ॉल्ट तरीकों से कुछ हद तक बदल गया है। लेकिन डिफ़ॉल्ट तरीकों के साथ आप सीधे किसी ऑब्जेक्ट की स्थिति को नहीं बदल सकते हैं। कार्यान्वयन परिभाषित करता है कि कौन से राज्य संभव हैं (सदस्य चर परिभाषित करके), इंटरफ़ेस नहीं। इंटरफेस सिर्फ यह बताता है कि क्या आता है और क्या आता है, जबकि कार्यान्वयन विवरण कार्यान्वयन के लिए दिए जाते हैं। इस प्रकार, यह केवल एक डिफ़ॉल्ट कन्स्ट्रक्टर प्रदान करने के लिए समझ में नहीं आता है, क्योंकि आप इसमें किसी भी चर सेट या सेट नहीं कर सकते हैं। – thobens

2

Interface में Constructor प्रदान करना समझ में नहीं आता है।

जांचें कि इसके बजाय यह आपके लिए डिफ़ॉल्ट initialize() विधि प्रदान करने के लिए समझ में आता है या नहीं।

+0

डिफ़ॉल्ट रूप से प्रारंभिक() 'विधि को स्वचालित रूप से कॉल किया जाएगा जब इस इंटरफ़ेस वर्ग को ढेर पर रखा जाएगा? –

+1

नहीं, यह आपके ऊपर प्रारंभ करने के लिए कॉल(), उदाहरण के लिए फैक्टरी – AlexWien

1

आपको उस श्रेणी में डिफ़ॉल्ट कन्स्ट्रक्टर जोड़ने की आवश्यकता है जिसे आप क्रमबद्ध करना चाहते हैं।

+0

में मैंने ऐसा किया लेकिन अभी भी त्रुटि प्राप्त हो रही है, अनुमान है कि मुझे इंटरफ़ेस –

+0

के बजाय क्रम में क्रमबद्धता कोड को स्थानांतरित करना होगा, यदि यह एक कस्टम के रूप में है serialization, तो इंटरफेस मेथोस को writeObjectData (DataOutputStream डॉस) के रूप में परिभाषित कर सकता है और readObjectData() – AlexWien

+0

क्या आपको अपनी कक्षा में नोएआरजी कन्स्ट्रक्टर बनाना याद है? – MTilsted

1

कंस्ट्रक्टर्स हैं, यह जावा, सी # या Java8

तो हो ... अगर आप किसी भी कार्यक्षमता है कि क्या तुम करोगी इंटरफेस स्तर में डिफ़ॉल्ट रूप से परिभाषित करना चाहते हैं, जावा 8 Default Methods की अवधारणा पेश करता है।

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