यदि मेरे पास एक ओवरलोडेड कन्स्ट्रक्टर (डिफ़ॉल्ट और पैरा के साथ एक) वाला ग्राहक वर्ग है तो अधिभारित कन्स्ट्रक्टर में कक्षा के सदस्यों को सेट करने का उचित तरीका क्या है? "इस" संदर्भों का उपयोग या सेटटर विधियों का उपयोग कर?कक्षा सर्वोत्तम अभ्यास
बस यह सुनिश्चित नहीं था कि उचित विधि क्या थी।
public class Customer {
private String firstName;
private String lastName;
private int age;
public Customer() {}
//This Way
public Customer(String firstName, String lastName, int age)
{
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
// Or this way?
public Customer(String firstName, String lastName, int age)
{
setFirstName(firstName);
setLastName(lastName);
setAge(age);
}
/**
* @return the firstName
*/
public String getFirstName() {
return firstName;
}
/**
* @param firstName the firstName to set
*/
public void setFirstName(String firstName) {
this.firstName = firstName;
}
/**
* @return the lastName
*/
public String getLastName() {
return lastName;
}
/**
* @param lastName the lastName to set
*/
public void setLastName(String lastName) {
this.lastName = lastName;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
}
यह एकमात्र समझदार उत्तर है। वास्तव में, इस समस्या के कारण कई लिंट उपकरण कन्स्ट्रक्टर से गैर-अंतिम तरीकों को कॉल करने के बारे में चेतावनी देंगे। (यदि कक्षा अंतिम नहीं है लेकिन सेटटर विधियां हैं, तो यह उतनी ही अच्छी है।) –
@ कुमरविवेक मित्रा - मुझे आपका जवाब पसंद नहीं है, क्योंकि मेरी टिप्पणी यह इंगित करती है। –
@TedHopp कृपया मेरा जवाब दोबारा पढ़ें ... मुझे लगता है कि हम दोनों एक ही बात पर बात कर रहे हैं ..... फिर भी मुझे इसे फिर से लिखने दो ... मुझे लगता है कि आप 'ओसीपी' सिद्धांत ले रहे हैं, कक्षाएं विस्तार के लिए खुली हैं, लेकिन संशोधन के लिए बंद हैं .... और जैसा कि मुझे पता है कि रचनाकारों को विरासत में नहीं मिला है, और इसलिए ओवरराइड नहीं किया जा सकता है, इसलिए इसका अपरिवर्तनीय .... ' –