2010-10-26 17 views
5

निम्नलिखित उदाहरण में, मेरे पास 2 कन्स्ट्रक्टर हैं: एक जो स्ट्रिंग लेता है और एक कस्टम ऑब्जेक्ट लेता है। इस कस्टम ऑब्जेक्ट पर एक विधि "getId()" मौजूद है जो स्ट्रिंग देता है।शून्य होने पर कौन सा कन्स्ट्रक्टर चुना जाता है?

public class ConstructorTest { 
private String property; 

public ConstructorTest(AnObject property) { 
    this.property = property.getId(); 
} 

public ConstructorTest(String property) { 
    this.property = property; 
} 

public String getQueryString() { 
    return "IN_FOLDER('" + property + "')"; 
} 
} 

अगर मैं निर्माता को नल पास करता हूं, तो कौन सा कन्स्ट्रक्टर चुना जाता है और क्यों? मेरे परीक्षण में स्ट्रिंग कन्स्ट्रक्टर चुना गया है, लेकिन मुझे नहीं पता कि यह हमेशा मामला क्यों होगा और क्यों।

मुझे उम्मीद है कि कोई मुझे इस पर कुछ अंतर्दृष्टि प्रदान कर सकता है।

अग्रिम धन्यवाद।

उत्तर

12

ऐसा करने से:

ConstructorTest test = new ConstructorTest(null); 

संकलक बताते हुए शिकायत:

निर्माता ConstructorTest (AnObject) अस्पष्ट है।

JVM जो निर्माता के रूप में यह तर्क प्रकार है कि निर्माता से मेल खाता है की जानकारी नहीं है आह्वान करने के लिए नहीं चुन सकते हैं (देखें: 15.12.2.5 Choosing the Most Specific Method)।

आप विशिष्ट निर्माता पैरामीटर typecasting, की तरह से कॉल कर सकते हैं:

ConstructorTest test = new ConstructorTest((String)null); 

या

ConstructorTest test = new ConstructorTest((AnObject)null); 

अद्यतन: @OneWorld के लिए धन्यवाद, प्रासंगिक (तारीख लिंक अप करने के लिए पर लेखन का समय) here तक पहुंचा जा सकता है।

+0

आप सही हैं, मैंने अपने परीक्षण में गलती की है, यही कारण है कि संकलक त्रुटि दिखाई नहीं दे रही थी। –

+0

कास्टिंग नल, जो जानता था! –

+0

लिंक मौत है; ( – OneWorld

0

जावा तर्क के अनुसार यह सबसे विशिष्ट रचनाकार का उपयोग कर सकता है।
पीएस: यदि आप कन्स्ट्रक्टर (इनपुटस्ट्रीम) जोड़ते हैं, तो कंपाइलर अस्पष्टता के कारण त्रुटि फेंक देगा - यह नहीं पता कि अधिक विशिष्ट क्या है: स्ट्रिंग या इनपुटस्ट्रीम, क्योंकि वे अलग-अलग वर्ग पदानुक्रम में हैं।

+0

बिल्कुल गलत। मैं आपको इस जवाब को कम करने का बोझ बचाऊंगा। –

+0

क्यों नहीं? कृपया बताएं, अगर आपको कहने की याद आती है। – foret

+0

मेरी पोस्ट देखें .... –

3

संकलक त्रुटि उत्पन्न करेगा।

+0

आपको आगे विस्तार करना चाहिए। –

+0

आप सही हैं, मैंने अपने परीक्षण में गलती की है, यही कारण है कि संकलक त्रुटि दिखाई नहीं दे रही थी। –

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