2010-03-16 15 views
6

अच्छा, शायद यह एक बेवकूफ सवाल है, लेकिन मैं इस समस्या को हल नहीं कर सकता।जावा मेरे कन्स्ट्रक्टर क्यों नहीं ढूंढ सकता है?

मेरी ServiceBrowser वर्ग में मैं इस लाइन है:

ServiceResolver serviceResolver = new ServiceResolver(ifIndex, serviceName, regType, domain); 

और संकलक इसके बारे में शिकायत। इसे कहते हैं:

cannot find symbol 
symbol : constructor ServiceResolver(int,java.lang.String,java.lang.String,java.lang.String) 

यह अजीब है, क्योंकि मैं ServiceResolver में एक निर्माता है:

public void ServiceResolver(int ifIndex, String serviceName, String regType, String domain) { 
     this.ifIndex = ifIndex; 
     this.serviceName = serviceName; 
     this.regType = regType; 
     this.domain = domain; 
    } 

जोड़ा: मैं निर्माता से void हटा दिया है और यह काम करता है! क्यूं कर? हस्ताक्षर

public ServiceResolver(int ifIndex, String serviceName, String regType, String domain) { 
     this.ifIndex = ifIndex; 
     this.serviceName = serviceName; 
     this.regType = regType; 
     this.domain = domain; 
    } 
+2

'शून्य' का उपयोग विधियों के लिए नहीं किया जाना चाहिए, न कि रचनाकारों के लिए। – BalusC

+0

@Roman क्या आपने सिर्फ एक अलग खाते के साथ अपने प्रश्न का उत्तर दिया? – Bozho

+0

@ बोझो, नहीं। एक और रोमन एक और व्यक्ति है। – Roman

उत्तर

9

हटाने शून्य आप एक विधि है, न कि निर्माता को परिभाषित किया है।

void

5

से

+0

बोनो, एक और रोमन एक और व्यक्ति है। मैं अपने प्रश्न का उत्तर दूसरे खाते से नहीं देता हूं। – Roman

2

कोई निर्माता है कि निकालें ... यह एक सरल विधि है कि कुछ भी नहीं देता है। बिल्कुल कुछ नहीं!

इस होना चाहिए:

public ServiceResolver(int ifIndex, String serviceName, String regType, String domain) { 
     this.ifIndex = ifIndex; 
     this.serviceName = serviceName; 
     this.regType = regType; 
     this.domain = domain; 
    } 
0

जावा कंस्ट्रक्टर्स उनके हस्ताक्षर पर वापसी प्रकार की जरूरत नहीं है - वे परोक्ष वर्ग का एक उदाहरण लौट आते हैं।

0

गलती में आपका स्वागत है हर कोई एक बार बनाता है। जैसा कि रोमन बताता है कि आपको कन्स्ट्रक्टर के सामने से "शून्य" को हटाना होगा।

रचनाकारों ने कोई वापसी प्रकार घोषित नहीं किया है - जो कि x = new X() जैसी चीजें करते हैं, जो अजीब लग सकता है; लेकिन आप इसे इस तरह से विचार कर सकते हैं:

// what you write... 
public class X 
{ 
    public X(int a) 
    { 
    } 
} 

x = new X(7); 

// what the compiler does - well sort of... good enough for our purposes. 
public class X 
{ 
    // special name that the compiler creates for the constructor 
    public void <init>(int a) 
    { 
    } 
} 

// this next line just allocates the memory 
x = new X(); 

// this line is the constructor 
x.<init>(7); 

उपकरण का एक अच्छा सेट गलती (और कई अन्य) की इस तरह लगता है चलाने के लिए कर रहे हैं:

इस तरह जब आप अन्य सामान्य गलतियां करते हैं (आप करेंगे, हम सब करते हैं :-), आप अपने पहियों को इतनी ज्यादा समाधान की तलाश नहीं करेंगे।

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