2017-11-01 21 views
8

मैं एक परिदृश्य में जहाँ दो कार्य हूबहू समान हैं, लेकिन कक्षा दो में इस्तेमाल वस्तु भिन्न होते हैं, इस तरह समान हो रहा है के लिए जेनेरिक प्रकार का उपयोग करना,ही कार्यक्षमता

public int function1(inputObject input){ 
    LeadMaster lead= input.getLeadMaster(); 
    PropertyUtils.setProperty(lead, input.getKey(), input.getValue()); 
    return 0; 
} 

और इसी तरह अन्य समारोह की तरह,

public int function2(inputObject input){ 
    DealMaster deal= input.getDealMaster(); 
    PropertyUtils.setProperty(deal, input.getKey(), input.getValue()); 
    return 0; 
} 

मैं उपरोक्त वस्तु में मास्टर ऑब्जेक्ट के लिए जेनेरिक क्लास का उपयोग कैसे कर सकता हूं? मैंने अभी तक जेनिक्स का उपयोग नहीं किया है।

+1

आप जरूरी यहाँ जेनरिक की जरूरत नहीं है के रूप में परिभाषित। क्या आप कुछ आधार इंटरफ़ेस/कक्षा को परिभाषित नहीं कर सकते हैं जो कुछ "जेनेरिक" संपत्ति को परिभाषित करता है? सबसे खराब मामला आप यहां ऑब्जेक्ट का उपयोग कर सकते हैं। – GhostCat

+0

धन्यवाद @GostCat। क्या आप कृपया दिखा सकते हैं कि मैं उपरोक्त लीडमास्टर और डीलमास्टर के लिए एक सामान्य संपत्ति को कैसे परिभाषित करूं, उदाहरण – AJN

उत्तर

6

आप inputObject वर्ग के किसी भी संपत्ति के साथ काम करने के लिए अपने विधि चाहते हैं, आप एक कार्यात्मक इंटरफ़ेस है कि किसी भी के लिए जरूरी संपत्ति रिटर्न पारित कर सकते हैं inputObject उदाहरण:

public <T> int function(inputObject input, Function<inputObject,T> func) { 
    T obj = func.apply(input); 
    PropertyUtils.setProperty(obj, input.getKey(), input.getValue()); 
    return 0; 
} 

अब आप

function(input,inputObject::getLeadMaster); 
के साथ इस विधि कॉल कर सकते हैं

या

function(input,inputObject::getDealMaster); 
+0

ओह डान - बिल्कुल हाँ :) – Eugene

+0

धन्यवाद @ ईरान। मैं केवल वही खोज रहा था। – AJN

+0

यह देखने के लिए दिलचस्प होगा कि 'PropertyUtils.setProperty' विधि कैसे काम करेगी यदि' लीडमास्टर' और 'डीलमास्टर' एक सामान्य इंटरफ़ेस साझा नहीं करते हैं। – CKing

0

आप फिर से परिभाषित कर सकता है आपके विधि बस के रूप में:

public int function1(inputObject input, boolean lead){ 
    if(lead) { 
     LeadMaster lead= input.getLeadMaster(); 
     PropertyUtils.setProperty(lead, input.getKey(), input.getValue());  
    } else { 
     DealMaster deal= input.getDealMaster(); 
     PropertyUtils.setProperty(deal, input.getKey(), input.getValue()); 
    } 
    return 0; 
} 
+0

धन्यवाद @ यूजीन। लेकिन मेरे आवेदन में मेरे पास ऐसी कई मास्टर वस्तुएं हैं। तो मैं एक और सामान्यीकृत समाधान के बारे में सोच रहा था। जवाब के लिए धन्यवाद। – AJN

0

पहले परिवर्तन inputObject। लिखें विधियां input.getMaster (ऑब्जेक्ट ऑब्जेक्ट) input.setMaster (ऑब्जेक्ट ऑब्जेक्ट) जो जेनेरिक ऑब्जेक्ट्स सेट करता है और प्राप्त करता है। आप सामान्य रूप से LeadMaster और DealMaster दोनों सेट करने में सक्षम होंगे।

एक अमूर्त वर्ग लिखें या एक सुपर क्लास का उपयोग करें जो दोनों वर्गों तक बढ़ा है जिसमें function1 और function2 है। कि अमूर्त या सुपर वर्ग उपयोग सामान्य विधि के अंदर आप inputObject

public int function(inputObject input){ 
    PropertyUtils.setProperty(input.getMaster, input.getKey(), input.getValue()); 
    return 0; 
} 
संबंधित मुद्दे