अगर एक जावा क्लास रनटाइम में दूसरे को बढ़ाती है तो टेस्ट कैसे करें?


जवाबों:


255

क्या आप देख रहे हैं:

Super.class.isAssignableFrom(Sub.class)

84

यदि आप जानना चाहते हैं कि क्या कोई और Classविस्तार करता है या नहीं , कक्षा # isAssignableFrom (क्लास) का उपयोग करें । आपके उदाहरण के लिए, यह होगा:

if(B.class.isAssignableFrom(A.class)) { ... }

यदि आप इस बात में रुचि रखते हैं कि कोई उदाहरण किसी विशेष प्रकार का है या नहीं, तो उपयोग करें instanceof:

A obj = new A();
if(obj instanceof B) { ... }

ध्यान दें कि trueयदि वर्ग / आवृत्ति प्रकार पदानुक्रम का एक सदस्य है और सीधे सुपरक्लास / उपवर्ग रिश्तों के लिए प्रतिबंधात्मक नहीं है, तो ये वापस आ जाएंगे । उदाहरण के लिए:

// if A.class extends B.class, and B.class extends C.class
C.class.isAssignableFrom(A.class); // evaluates to true
// ...and...
new A() instanceof C; // evaluates to true

यदि आप सीधे सुपरक्लास / उपवर्ग रिश्तों की जांच करना चाहते हैं, तो टिम ने भी जवाब दिया है


2
वास्तव में, यह B.class.isAssignableFrom (A.class) है, क्योंकि वह जानना चाहता है कि क्या A, B. का उपवर्ग है
मेरिटॉन

1
आह हाँ, मैं इसे बदल दूँगा। आमतौर पर उदाहरण दूसरे तरीके हैं (बी का विस्तार ए)।
रॉब ह्रस्का

छल किया हुआ हां; - विस्तृत उत्तर के लिए बहुत धन्यवाद; मैं मेरिटॉन को स्वीकार कर रहा हूं, हालांकि, यह सबसे स्पष्ट आईएमओ है।
आर्मंड

42

आप यह जानना चाहते हैं कि क्या उपलब्ध b है a :

b.isAssignableFrom(a);

इसके अतिरिक्त, यदि आप जानना चाहते हैं कि aइसका एक सीधा उपवर्ग है b:

a.getSuperclass().equals(b);

उत्तर के लिए धन्यवाद, और उपयोग करने के लिए धन्यवाद aऔर bसवाल से
आर्मंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.