2012-08-31 4 views
9

मेरे पास जावा क्लास फ़ील्ड के बारे में कोई प्रश्न है।जावा में अपने मूल वर्ग से फ़ील्ड कॉपी करें

मैं दो जावा वर्गों है: जनक एवं बाल

class Parent{ 
    private int a; 
    private boolean b; 
    private long c; 

    // Setters and Getters 
    ..... 
} 


class Child extends Parent { 
    private int d; 
    private float e; 

    // Setters and Getters 
    ..... 
} 

अब मैं Parent वर्ग का एक उदाहरण है। क्या Child वर्ग का उदाहरण बनाने और सेटर्स को एक-एक करके कॉल किए बिना मूल वर्ग के सभी फ़ील्ड कॉपी करने का कोई तरीका है?

मैं यह करने के लिए नहीं करना चाहते:

Child child = new Child(); 
    child.setA(parent.getA()); 
    child.setB(parent.getB()); 
    ...... 

इसके अलावा, Parent एक कस्टम निर्माता नहीं है और मैं इसे पर निर्माता नहीं जोड़ सकते हैं।

कृपया आपको राय दें।

बहुत धन्यवाद।

+0

कैसे के बारे में माता-पिता getters और setters में अधिभावी बाल वर्ग नंबरी की तरह सुझाव देते हैं। – km1

उत्तर

0

आप अपने खेतों को निजी रूप से protected के रूप में सेट कर सकते हैं और उन्हें सीधे बाल कक्षा में एक्सेस कर सकते हैं। क्या उससे मदद हुई?

+0

यह मदद नहीं करेगा, सवाल यह है कि उसे लगता है कि उसे बच्चे के – mavroprovato

0

आप एक Child कन्स्ट्रक्टर बना सकते हैं जो अभिभावक को स्वीकार करता है। लेकिन वहां, आपको सभी मान एक-एक करके सेट करना होगा (लेकिन आप बिना सेट किए सीधे चाइल्ड एट्रिब्यूट तक पहुंच सकते हैं)।

प्रतिबिंब के साथ एक कामकाज है, लेकिन यह केवल इसके लिए जटिलता जोड़ता है। आप इसे कुछ टाइपिंग सहेजने के लिए नहीं चाहते हैं।

1

क्या आपने इस उचित प्रतिबिंब को करने का प्रयास किया? तकनीकी आप एक-एक करके सेटर्स का आह्वान करते हैं लेकिन आपको उन सभी नामों को जानने की आवश्यकता नहीं है।

15

क्या आपने कोशिश की है?

BeanUtils.copyProperties (बच्चे, माता-पिता)

http://commons.apache.org/beanutils/apidocs/org/apache/commons/beanutils/BeanUtils.html

+0

के दूसरे उदाहरण से बच्चे का एक नया उदाहरण बनाने की आवश्यकता है .. थोड़ा सा कोरक्शन, यह वास्तव में बीनयूल्ट्स.copyProperties (पैरेंट, बच्चे) या (स्रोत , लक्ष्य) – sheetal

+0

@sheetal एह ... नहीं। यह 'BeanUtils.copyProperties (गंतव्य, मूल)' है: https://github.com/apache/commons-beanutils/blob/f9ac36d916bf2271929b52e9b40d5cd8ea370d4b/src/main/java/org/apache/commons/beanutils/BeanUtils.java#L132 – Jasper

+0

@ जैस्पर मुझे लगता है कि मैं वसंत ढांचे का उपयोग कर रहा हूं, फिर https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/BeanUtils.html – sheetal

4

आप प्रतिबिंब मैं यह कर उपयोग कर सकते हैं और मेरे लिए अच्छा काम:

public Child(Parent parent){ 
    for (Method getMethod : parent.getClass().getMethods()) { 
     if (getMethod.getName().startsWith("get")) { 
      try { 
       Method setMethod = this.getClass().getMethod(getMethod.getName().replace("get", "set"), getMethod.getReturnType()); 
       setMethod.invoke(this, getMethod.invoke(parent, (Object[]) null)); 

      } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { 
       //not found set 
      } 
     } 
    } 
}