2010-01-16 22 views
6

संपादित करें: हल,,जावा - सुनिश्चित करें कि एक वस्तु को लागू करता है एक अंतरफलक

जावा में नीचे

हाय देखते हैं, मैं एक वस्तु है कि किसी भी वर्ग के हो सकता है मिल गया। लेकिन - उस ऑब्जेक्ट को हमेशा एक इंटरफ़ेस को कार्यान्वित करना होगा, इसलिए जब मैं इंटरफ़ेस द्वारा परिभाषित विधियों को कॉल करता हूं, तो उस ऑब्जेक्ट में उस विधि को शामिल किया जाएगा।

अब, जब आप जावा में जेनेरिक ऑब्जेक्ट पर एक कस्टम विधि कॉल करने का प्रयास करते हैं, तो यह टाइपिंग के बारे में मिक्स करता है। मैं किसी भी तरह संकलक को कैसे बता सकता हूं कि मेरा ऑब्जेक्ट उस इंटरफ़ेस को कार्यान्वित करता है, इसलिए विधि को कॉल करना ठीक है।

Object(MyInterface) obj; // Now the compiler knows that obj implements the interface "MyInterface" 
obj.resolve(); // resolve() is defined in the interface "MyInterface" 

मैं कैसे जावा में ऐसा कर सकते हैं:

मूल रूप से, मैं क्या तलाश कर रहा हूँ कुछ इस तरह है?

उत्तर: ठीक है, अगर इंटरफ़ेस MyInterface नाम पर है तो आप सिर्फ पोस्ट करने से पहले सोच नहीं करने के लिए रख सकते हैं

MyInterface obj; 
obj.resolve(); 

क्षमा करें ....

+0

* मुस्कान * - आपकी अंतिम टिप्पणी के लिए +1 :-) –

उत्तर

1
if (object instanceof MyInterface) { 
    ((MyInterface) object).resolve(); 
} 
1
MyInterface a = (MyInterface) obj; 
a.resolve(); 

या

((MyInterface)obj).resolve(); 

जावा कंपाइलर स्थिर प्रकार का उपयोग ch ch तरीकों के लिए ईक, इसलिए आपको ऑब्जेक्ट को उस प्रकार पर डालना होगा जो आपके इंटरफ़ेस को लागू करता है या इंटरफ़ेस पर ही डाला जाता है।

3

तुम सिर्फ एक type cast के साथ कार्य करें:

((MyInterface) object).resolve(); 

आमतौर पर यह सबसे अच्छा है यकीन है कि यह डाली मान्य है बनाने के लिए एक जांच करने के लिए - अन्यथा, आप एक ClassCastException मिलेगा। आप MyInterface को MyInterface ऑब्जेक्ट में लागू नहीं करते हैं जो कुछ भी shoehorn नहीं कर सकते हैं। जिस तरह से आप यह चेक करते हैं instanceof ऑपरेटर के साथ है:

if (object instanceof MyInterface) { 
    // cast it! 
} 
else { 
    // don't cast it! 
} 
संबंधित मुद्दे