अधिकांश समय, एक वर्ग के लिए एक निर्माता अपने तर्क मानों को लेकर उदाहरण चर सेट करने के लिए उन्हें इस्तेमाल से ज्यादा कुछ नहीं करता है:एक भी स्काला निर्माता है कि सेट चर की तुलना में अधिक होता है को लागू करने
// Java
public class MyClass {
private int id;
public MyClass(int id) {
this.id = id;
}
}
तो मैं समझता हूँ स्काला के डिफ़ॉल्ट निर्माता वाक्य रचना की दक्षता में ... बस वर्ग के नाम के बगल में कोष्ठक में चरों की सूची की घोषणा:
// Scala
class MyClass(id: int) {
}
हालांकि, उन परिस्थितियों जहाँ आप एक निर्माता की जरूरत के बारे में वास्तव में बस प्लग से काम करना, के अलावा इंस्टान में तर्क सीई चर?
// Java
public class MyClass {
private String JDBC_URL = null;
private String JDBC_USER = null;
private String JDBC_PASSWORD = null;
public MyClass(String propertiesFilename) {
// Open a properties file, parse it, and use it to set instance variables.
// Log an error if the properties file is missing or can't be parsed.
// ...
}
}
यह स्कैला में कैसे काम करता है? मैं तो इस तरह निर्माता के लिए एक कार्यान्वयन परिभाषित करने की कोशिश कर सकते हैं:
// Scala
class MyClass(propertiesFilename: String) {
def this(propertiesFilename: String) {
// parse the file, etc
}
}
... लेकिन मैं एक संकलन त्रुटि मिलती है, शिकायत है कि निर्माता दो बार परिभाषित किया गया है।
मैं नो-एर्ग डिफॉल्ट कन्स्ट्रक्टर होने के बाद इस संघर्ष से बच सकता हूं, और फिर उपर्युक्त माध्यमिक कन्स्ट्रक्टर के रूप में घोषित कर सकता हूं। हालांकि, परिस्थितियों के बारे में क्या आपको वास्तव में "एक-और-केवल-एक" कन्स्ट्रक्टर की आवश्यकता है, और आपको सामान करने की आवश्यकता है?
दोह की सुविधा के लिए भुगतान करने के लिए यह एक छोटी सी कीमत है! धन्यवाद, मैं धीरे-धीरे वहां जा रहा हूं ... –