2010-08-16 6 views

उत्तर

22

नहीं

यह कोई मतलब नहीं है, तो निर्माता के लिए किसी भी जानकारी की आपूर्ति तो आप एक शून्य तर्क निर्माता है की जरूरत नहीं है के बिना वर्ग का एक उदाहरण बनाने के लिए।

एक अच्छा उदाहरण java.awt.Color वर्ग है, जिसका सभी सीटीआर तर्कसंगत हैं।

+7

एक और अच्छा उदाहरण के भीतर - अपरिवर्तनीय प्रकार के। –

+1

@andy यह अपने आप का जवाब देने योग्य है। – Trillian

+1

कोई प्रतिवाद उदाहरण: जावा बीन्स - http://en.wikipedia.org/wiki/Java_Beans#JavaBean_conventions –

10

नहीं, यह भावना हमेशा शून्य तर्क कंस्ट्रक्टर्स बनाने के लिए नहीं है, निम्न परिदृश्यों उदाहरण हैं जहां यह समझ में आता है कम से कम एक-कुछ-तर्क-निर्माता

  1. आवश्यक निर्भरता प्रदान करने के लिए उस वर्ग खुद नहीं बना सकते हैं।
  2. गुणों के लिए कोई समझदार डिफ़ॉल्ट नहीं हैं।

मामलों जहां है/एक शून्य तर्क निर्माता की जरूरत हैं:

  1. आप JavaBeans विनिर्देश के अनुपालन करने के लिए चाहते हैं (सरल डेटा वस्तुओं के लिए समझ में आता है)।
  2. सभी फ़ील्ड को समझदार डिफ़ॉल्ट का उपयोग करके प्रारंभ किया जा सकता है।
  3. आप उस ढांचे का उपयोग करना चाहते हैं जिसकी आवश्यकता है।

मेरी राय में शून्य-तर्क कन्स्ट्रक्टर रखने के लिए गलत तर्कों में से एक तर्कों की एक लंबी सूची है। इसके लिए सृजन के बाद एक सुरक्षित स्थिति में नहीं होने वाली ऑब्जेक्ट को प्रारंभ करने के लिए स्वीकार करने से बेहतर समाधान हैं:

  1. बिल्डर पैटर्न का उपयोग करना।
  2. निर्माता के माध्यम से एक उदाहरण कॉन्फ़िगर करने के लिए विशेष कंटेनर वस्तुओं प्रदान करें।
  3. कई निर्माताओं जहां हर एक के आधार तर्क सौंपा चूक नहीं हो सकता है कि आवश्यक पैरामीटर हैं प्रदान करें।
3

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

4

के रूप में एंडी थॉमस-क्रेमर पहले ही उल्लेख किया गया है, यह भी असंभव है:

class NeedsToBeImmutable { 
    // For a class to be immutable, its reachable state 
    // MUST be reached through a final field 
    private final String stuff; 

    //!!Compile error!! 
    public NeedsToBeImmutable(){} 

    public NeedsToBeImmutable(String stuff){ 
    this.stuff = stuff; 
    } 
    //getters... 
} 
+1

हम हमेशा एक शून्य तर्क निर्माता है चाहिए? नहीं, क्या यह हमेशा संभव है? हाँ, लेकिन अक्सर अवांछित। सार्वजनिक ज़रूरतों के लिए Imututable() {सामान = "हैलो वर्ल्ड"} // कोई संकलन त्रुटि लेकिन बेकार – emory

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