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


जवाबों:


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.