2012-05-15 14 views
7

मुझे इस समय निम्न समस्या का सामना करना पड़ रहा है:क्या एक्लिप्स का उपयोग कर किसी निश्चित वर्ग के बराबर() की सभी कॉल सूचीबद्ध करने का कोई तरीका है?

मेरे पास एक निश्चित कक्षा है जिसमें बराबर() - विधि ओवरराइड है। हालांकि मुझे यकीन नहीं है कि इसका उपयोग कभी भी किया जा रहा है (या तो मेरे या मेरे कॉलेग्यू परियोजनाओं में से एक में)। क्या पता लगाने का कोई तरीका है? जब मैं संदर्भों की खोज करता हूं, ठीक है, तो यह मुझे ऑब्जेक्ट बराबर() - विधि (जो काफी कुछ हैं) के सभी संदर्भ देता है। निश्चित रूप से उन सभी के माध्यम से स्कैन करने का एक आसान तरीका होना चाहिए ...

किसी को भी कोई विचार आया?

उत्तर

1

मैं ऐसी विधि के बारे में नहीं सोच सकता जो स्थिर रूप से स्थैतिक विश्लेषण के माध्यम से यह सुनिश्चित करेगा (मुझे संदेह है कि एक मौजूद है)।

एक व्यावहारिक विधि कि हो सकता है मदद equals() विधि की पहली पंक्ति पर एक ब्रेकपाइंट सेट है, और ग्रहण डिबगर में कार्यक्रम शुरू करने के लिए है। जब भी विधि कहा जाता है, ग्रहण डीबगर में तोड़ देगा। इस बिंदु पर आप कॉल स्टैक की जांच करने में सक्षम होंगे कि यह देखने के लिए कि किसने विधि कहा है।

प्रभावी ढंग से ऐसा करने के लिए आपको कुछ विचार करना होगा कि विधि को कॉल करने के लिए कौन से कोड पथ की उम्मीद की जा सकती है। यदि आप विधि को ट्रिगर करने में असमर्थ हैं, तो यह साबित नहीं करता है कि कोई इसका उपयोग नहीं करता है।

+2

और फिर क्या? डीबग मोड में हर संभव कोड पथ_ निष्पादित करें? – Asaph

+0

@ आसाफ: सम्मान के साथ, आपको बेहतर सुझाव पोस्ट करने के लिए बहुत स्वागत है। – NPE

+1

मैं जा रहा था लेकिन मुझे लगता है कि @aioobe का जवाब है (जिसे यह नहीं किया जा सकता है)। मैंने उसका जवाब उड़ाया। – Asaph

5

आप ग्रहण को एक असंभव कार्य को हल करने के लिए कह रहे हैं।

पता लगाने के लिए यदि किसी विशेष ओवरराइड विधि कहा जाता है या नहीं जिसके कारण अधिक ग्रहण प्रतिक्रिया का अनुमान लगाती है स्थिर डिसाइडेबल नहीं है,।

मान लें कि आपके पास कुछ फ़ील्ड Object o है और आप किसी बिंदु पर o.equals(...) करते हैं। यह निर्धारित करने के लिए कि o कभी भी YourClass ऑब्जेक्ट का संदर्भ ले सकता है, यह आवश्यक है कि आप प्रत्येक संभावित निष्पादन पथ के साथ o के रनटाइम प्रकार को निर्धारित करें, जिसे केवल स्थिर रूप से नहीं किया जा सकता है।

Object o = "hello"; 
System.out.println(o.length()); 

सबसे अच्छी बात आप कर सकते हैं शायद अपने कार्यक्रम डिबग है, या तो एक को तोड़ने बिंदु निर्धारित करके या फेंक कर:

कारण है कि यह असंभव है काफी क्यों संकलक निम्नलिखित कोड को खारिज कर दिया के समान है उदाहरण के लिए बराबर विधि के भीतर से एक असमर्थितऑपरेशन अपवाद।

+0

मुझे लगता है कि प्रश्न वर्कस्पेस प्रोजेक्ट्स में संदर्भों के बारे में था, रनटाइम कॉल नहीं –

+1

इस तरह मैंने सवाल भी समझाया। – aioobe

+0

आह मैं देखता हूं; लेकिन अगर मैं कक्षा में एक ओवरराइड बराबर() आमंत्रण को हिलाता हूं और F3 दबाता हूं, तो ग्रहण ओवरराइडिंग विधि परिभाषा पर सही ढंग से जाता है, ऑब्जेक्ट्स बराबर नहीं()। तो वर्कस्पेस में हर फाइल पर दोहराया नहीं जा सका? –

1

ग्रहण -> पैकेज एक्सप्लोरर या रूपरेखा दृश्य में विधि का नाम चुनें और F4 पर क्लिक करें। वैकल्पिक रूप से आप विधि का चयन कर सकते हैं -> राइट क्लिक करें -> ओपन कॉल पदानुक्रम
यह आपके कार्यक्षेत्र में इस विधि को कॉल करने वाले सभी सदस्यों को दिखाएगा। आशा इस

1

में मदद करता है के बारे में की तरह कुछ करने के लिए ओवरराइड को संशोधित करने के बराबर होती है क्या:

log.debug // Whatever you want 
return this == obj; 

जो तुम देना क्लासिक वस्तु के बराबर होती है? या शायद एक सुपर.क्वल्स यदि आप कुछ कक्षा बढ़ाते हैं?

1

लगता है कि जावा उस सम्मान में टूट गया है। तो आपको इसे कठिन तरीके से करने की ज़रूरत है और सभी घटनाओं को पकड़ने की उम्मीद है।

  • एक के बाद एक का नाम बदलकर अपनी कक्षा की एक प्रति
  • वर्ष वर्ग
  • फिक्स सभी हटाएं संकलक त्रुटियों बनाएँ। जहां वर्ग नक्शे के लिए कुंजी के रूप में प्रयोग किया जाता है घटनाओं के लिए
  • देखो
  • () indexOf (, शामिल हैं())) वर्ग के वर्ग के संग्रह बराबरी पर कॉल के लिए
  • देखो() या hashCode (के लिए
  • देखो
  • आशा है कि आपको कुछ याद नहीं आया
संबंधित मुद्दे

 संबंधित मुद्दे