जावा में प्रतिबिंब का उपयोग करते हुए एक साधारण JSON serialiser लिखते समय मुझे class.getMethods() के व्यवहार से गार्ड को पकड़ा गया था। ऐसा प्रतीत होता है कि जावा क्लास.getMethods() ओवरराइडिंग विधि के ओवरराइडिंग विधि का रिटर्न प्रकार विस्तारित करता है, तो ओवरराइडिंग और ओवरराइड विधियों दोनों को लौटाता है।
इसलिए उदाहरण के लिए दिए गए इंटरफेस:ओवरराइड विधियों पर जावा क्लास.getMethods() व्यवहार
static interface A {
A x();
A y();
}
static interface B extends A {
B x();
A y();
}
A.class.getMethods()
रिटर्न और दो तरीकों में से सरणी के रूप में की उम्मीद तथापि B.class.getMethods()
3 तरीकों की एक सरणी (जो मेरे लिए थोड़ा काउंटर सहज ज्ञान युक्त था) देता है। 3 में से 1, y()
के अनुरूप होने के अनुरूप है लेकिन शेष दो मूल x()
से संबंधित प्रकार A
और x()
के ओवरराइडिंग संस्करण क्रमशः B
के साथ मेल खाते हैं। इसने मुझे थोड़ा अजीब के रूप में मारा लेकिन सरणी में मूल x()
क्योंकि यह कहीं से भी उपलब्ध नहीं है। वैसे भी मेरा सवाल यह है:
क्या कक्षा के तरीकों के केवल सबसे विशेष संस्करणों की सूची प्राप्त करने का कोई आसान तरीका है बिना मैन्युअल रूप से ओवरराइड विधियों की जांच करने और उन्हें फ़िल्टर करने का उपयोग किए बिना?
यही व्यवहार काफी उम्मीद है, के रूप में इंटरफेस सिर्फ तरीकों घोषित करने के लिए उपयोग किया जाता है, तो सिंथेटिक (संकलक द्वारा बनाई गई) नहीं हैं । –