2012-06-27 10 views
9

क्या किसी ऑब्जेक्ट की हर विधि पर "गेट" से शुरू होने वाले नाम के साथ किसी भी तरह से फिर से प्रयास करना संभव है? मैं दो जटिल जटिल वस्तुओं की तुलना करना चाहता हूं, जिनमें अन्य कस्टम ऑब्जेक्ट्स के आधार पर डेटा संरचनाएं शामिल हैं। मैं क्या करना चाहता हूं कि प्रत्येक विधि के परिणाम का हैशकोड प्राप्त करें, और तुलना करें कि वे प्रत्येक फ़ील्ड के बराबर हैं या नहीं।"प्राप्त करें" से शुरू होने वाले सभी विधियों पर इटरेट करना - ऑब्जेक्ट्स की तुलना करना

क्षमा करें अगर यह बहुत समझ में नहीं आता है, यदि आपके कोई प्रश्न हैं तो कृपया पूछें। किसी भी मदद के लिए धन्यवाद और सुझावों

मैं ऐसा ही कुछ के बारे में सोचा:

for(method m : gettersOfMyClass){ 
boolean same = object1.m.hashCode() == object2.m.hashCode() 
} 
+0

ताकि आप की तरह कुछ करना चाहता हूँ *** () ..write? .. – Ahmad

+1

... क्या आप 'हैशकोड()' या 'बराबर' के प्रतिबिंबित कार्यान्वयन का निर्माण करने की कोशिश कर रहे हैं? क्या कोई कारण है कि आप केवल अपना आईडीई उत्पन्न नहीं कर सकते हैं? –

+0

गेटर्स - http://stackoverflow.com/questions/8524011/java-reflection-how-can-i-get-the-all-getter-methods-of-a-java-class-and-invoke – ant

उत्तर

15

निश्चित रूप से यह संभव है, और यह तथ्य काफी सरल में:

public static void main(String[] args) throws Exception { 
    final Object o = ""; 
    for (Method m : o.getClass().getMethods()) 
    if (m.getName().startsWith("get") && m.getParameterTypes().length == 0) { 
     final Object r = m.invoke(o); 
     // do your thing with r 
    } 
} 
+0

हाय, क्या आप यह बताने की परवाह करेंगे कि यह लाइन क्या करती है: अंतिम ऑब्जेक्ट r = m.invoke (o); – LucasSeveryn

+0

यह उदाहरण 'ओ' पर विधि' एम 'को आमंत्रित करता है और परिणाम को' आर' 'असाइन करता है। यह 'ऑब्जेक्ट आर = o.getXyz() 'के बराबर करता है, ऐसे मामले में जहां' m.getName()' 'getXyz' देता है। –

+0

बहुत धन्यवाद मार्को! बहुत उपयोगी और स्पष्ट समाधान! – LucasSeveryn

0

पलटा अवधारणा से निपटने के लिए कुछ बात की तरह लग रहा ।

class Syndrome{ 
public void getMethod1(){} 
public void getMethod2(){} 
public void getMethod3(){} 
public void getMethod4(){} 
} 

मुख्य विधि:: ऑब्जेक्ट

इंजीनियरिंग हो सकता है यह है कि क्या आप

नमूना कक्षा की जरूरत है रिवर्स

Syndrome syndrome = new Syndrome(); 

Method[] methods = syndrome.getClass().getMethods(); 

for(int index =0; index < methods.length; index++){ 

if(methods[index].getName().contains("get")){ 
    // Do something here 
} 

}