2011-03-22 6 views
6

के लिए पैरामीटर तैयार करें मेरे पास एक बेस क्लास है जिसे पैरामीटर के साथ बनाया जाना है। बाल वर्ग में मुझे बेस क्लास बनाने से पहले इस पैरामीटर को तैयार करने की आवश्यकता है लेकिन जावा सुपर में किसी और चीज से पहले कॉल किया जाना चाहिए। इस स्थिति को संभालने का सबसे अच्छा तरीका क्या है (नीचे सरल उदाहरण देखें)।सुपर कन्स्ट्रक्टर

class BaseClass { 
    protected String preparedParam; 

    public BaseClass(String preparedParam) { 
     this.param = param; 
    } 
} 

class ChildClass { 

    public ChildClass (Map<String, Object> params) { 
     // need to work with params and prepare param for super constructor 
     super(param); 
    } 
} 

उत्तर

11

आप एक स्थिर विधि, कि परिवर्तन करता है बना सकते हैं और फोन है कि कर सकते हैं।

class ChildClass { 
    public ChildClass(Map<String, Object> params) { 
     super(process(params)); 
    } 

    private static String process(Map<String, Object> params) { 
     // work with params here to prepare param for super constructor 
    } 
} 
5

यहाँ एक तरीका है। यदि अभिभावक वर्ग एक डिफ़ॉल्ट कन्स्ट्रक्टर प्रदान करता है, तो आप सुपर की ऑब्जेक्ट को तुरंत चालू कर सकते हैं और फिर सेटर विधि का उपयोग कर सकते हैं।

0

मैं अब तक सबसे अच्छा के रूप में रोमन के जवाब का मूल्यांकन कैसे करेंगे:

class ChildClass { 

    static String preprocessParams(Map<String, Object> params) { 
     ... 
     return someString; 
    } 

    public BaseClass(Map<String, Object> params) { 
     super(preprocessParams(params)); 
    } 
} 
2

कई पैरामीटर जिन्हें तैयार/प्रारंभ करना है, उनके लिए सरल factory method मेरे लिए बेहतर समाधान है। यह मेरे दृष्टिकोण पर थोड़ा सा स्पष्ट समाधान है। वैसे भी सभी जवाब के लिए धन्यवाद।

class BaseClass { 
    protected Object preparedParam; 

    public BaseClass(Object preparedParam) { 
    this.preparedParam = preparedParam; 
    } 
} 

class ChildClass extends BaseClass { 

    private ChildClass(Object preparedParam) { 
    super(preparedParam); 
    } 

    public static ChildClass createChildClass(Map<String, Object> params) { 
    Object param1 = params.get("param1"); 

    // prepare params here 

    ChildClass result = new ChildClass(param1); 

    // do other stuff 

    return result; 
    } 
} 
+0

कभी कभी, सुपर निर्माता एक मूल्य लेता है लेकिन सुपर वर्ग उद्देश्य यह है कि आप में पारित वापस पाने के लिए कोई तरीका नहीं है। यदि यह मामला है, और आप के रूप में अच्छी सुपर क्लास में उस वस्तु की जरूरत है के रूप में आप अपने कोड हैं, तो कारखाना विधि एक समाधान है, जबकि स्थैतिक तैयार विधि कोई समाधान नहीं है। –