2010-04-04 16 views
15
$ cat Const.java 
public class Const { 
    String Const(String hello) { 
     return hello; 
} 
public static void main(String[] args) { 
    System.out.println(new Const("Hello!")); 
} 
} 
$ javac Const.java 
Const.java:7: cannot find symbol 
symbol : constructor Const(java.lang.String) 
location: class Const 
    System.out.println(new Const("Hello!")); 
        ^
1 error 
+0

संपादन की तरह कुछ करने के लिए इस सवाल का शीर्षक पर विचार करें: सिद्धांत इसे समझने के लिए "जावा: यहाँ मेरी निर्माता एक मूल्य लौटने है?" मेरे पास एक विशिष्ट सवाल था कि जावा कैसे रचनाकारों से मूल्य लौटाता है और मैंने सोचा कि यह प्रश्न उस सामान्य विषय पर था ... इसके बजाय यह कुछ है "सहायता, मैं अपने कन्स्ट्रक्टर को रिटर्न वैल्यू असाइन नहीं कर सकता!" – Jan

उत्तर

22

जो आपने परिभाषित किया है वह वास्तव में एक निर्माता नहीं है, लेकिन Const नामक एक विधि है। आप कुछ इस तरह करने के लिए अपने कोड में बदला है, यह काम करेगा:

Const c = new Const(); 
System.out.println(c.Const("Hello!")); 

तो कोई विशेष निर्माता स्पष्ट रूप से परिभाषित किया गया है, संकलक स्वचालित रूप से नो-तर्क निर्माता बनाता है।

1

निर्माता कोई मूल्य नहीं लौटा सकता है। यह अंतिम है। यह वही समझ है - इसमें वापसी का प्रकार नहीं हो सकता है और यही कारण है कि आप संकलन त्रुटि प्राप्त कर रहे हैं। आप कह सकते हैं कि रिटर्न वैल्यू हमेशा कन्स्ट्रक्टर द्वारा बनाई गई वस्तु को स्पष्ट रूप से निहित करता है।

9

वास्तव में एक जावा वर्ग में निर्माता एक मूल्य यह

public class Test { 
public Test(/*here the params*/) { 
    //this is a constructor 
    //just make some operations when you want to create an object of this class 
} 
} 

जांच इन कड़ियों http://leepoint.net/notes-java/oop/constructors/constructor.html http://java.sun.com/docs/books/tutorial/java/javaOO/constructors.html

1

निम्नलिखित रूप में होना चाहिए वापस नहीं लौट सकते एक निर्माता एक वापसी मान नहीं हो सकता एक "सामान्य" समारोह की तरह। यह तब कहा जाता है जब प्रश्न में वर्ग की आबादी बनाई जाती है। इसका उपयोग उस उदाहरण के आरंभ करने के लिए किया जाता है।

22

रचनाकार एक मूल्य वापस नहीं कर सकते हैं; वे बोलने के लिए, निर्मित वस्तु वापस लौटते हैं।

आपको एक त्रुटि मिलती है क्योंकि संकलक एक निर्माता की तलाश में है जो इसकी तर्क के रूप में एक स्ट्रिंग लेता है। चूंकि आपने नहीं एक कन्स्ट्रक्टर घोषित किया है, केवल एकमात्र कन्स्ट्रक्टर उपलब्ध डिफॉल्ट कन्स्ट्रक्टर है जो कोई तर्क नहीं लेता है।

मैं क्यों कहता हूं कि आपने एक निर्माता घोषित नहीं किया है? क्योंकि जैसे ही आप अपनी विधि के लिए रिटर्न वैल्यू/टाइप घोषित करते हैं, यह अब एक कन्स्ट्रक्टर नहीं है बल्कि एक नियमित विधि है।

Java Documentation से:

एक वर्ग कंस्ट्रक्टर्स कि वर्ग खाका से वस्तुओं को बनाने के लागू होते हैं। कन्स्ट्रक्टर घोषणाएं घोषणाओं की तरह दिखती हैं-सिवाय इसके कि वे कक्षा के नाम का उपयोग करते हैं और प्रकार नहीं लौटाते हैं।

यदि आप विस्तारित करते हैं कि आप किसी को प्राप्त करने की कोशिश कर रहे हैं तो आप यह बताने में सक्षम होंगे कि आप उस लक्ष्य को कैसे प्राप्त कर सकते हैं।

0
public class Const { 
    private String myVar; 

    public Const(String s) { 
    myVar = s; 
    } 

    public String getMyString() 
    { 
     return myVar; 
    } 

    public static void main(String[] args) { 
    Const myConst = new Const("MyStringHere"); 
    System.out.println(myConst.getMyString()); 
    } 
} 
+1

आपको getStyring() के बजाय एक toString() फ़ंक्शन बनाना चाहिए। तो आप 'System.out.println (myConst)' कर सकते हैं – Rhs

0

मैं सबसे अच्छा तरीका प्रभाव आप होगा निम्नलिखित चाहते उत्पादन करने के लिए लगता है:

public class Const { 

    private String str; 

    public Const(String hello) { 
     str = hello; 
    } 

    public String toString() { 
     return str; 
    } 

    public static void main(String[] args) { 
     System.out.println(new Const("Hello!")); 
    } 
} 

यह public String Const() विधि आप पहले उपयोग ले लेती है और Object की public String toString() विधि अधिभावी द्वारा (जो सब जावा क्लास से उत्तराधिकारी) ऑब्जेक्ट का स्ट्रिंग मान सही ढंग से मुद्रित होता है जब आप ऑब्जेक्ट प्रिंट करना चाहते हैं, इसलिए आपकी मुख्य विधि अपरिवर्तित बनी हुई है।

5

एक कन्स्ट्रक्टर एक मूल्य वापस नहीं कर सकता है क्योंकि एक निर्माता पूरी तरह से किसी ऑब्जेक्ट की संदर्भ आईडी देता है, और चूंकि एक कन्स्ट्रक्टर भी एक विधि है और एक विधि एक से अधिक मान वापस नहीं कर सकती है। तो हम स्पष्ट रूप से कहते हैं कि रचनाकार के पास वापसी मूल्य नहीं है।

2

पहले से ही बहुत से अच्छे उत्तर हैं। मैं इसे जोड़ना चाहूंगा, अगर आप किसी कन्स्ट्रक्टर को आवेदक के परिणामस्वरूप ऑब्जेक्ट से कुछ रिटर्न कोड अलग करना चाहते हैं, तो आप कन्स्ट्रक्टर को factory method में लपेट सकते हैं, जो सृजन पर, उदाहरण के लिए कुछ डेटा सत्यापन कर सकता है निर्मित वस्तु और परिणाम के आधार पर boolean लौटाएं।

0

किसी कन्स्ट्रक्टर से मूल्य वापस करने के लिए - बस पैरामीटर के रूप में सरणी में पास करें।

Test() { 
    Boolean[] flag = new Boolean[1]; 
    flag[0] = false; 
    new MyClass(flag); 
    System.out.println(flag[0]); // Will output 'true' 
} 

class MyClass { 
    MyClass(Boolean[] flag) { 
     // Do some work here, then set flag[0] to show the status 
     flag[0] = true; 
    } 
} 
0
/************************************************ 
    Put the return value as a private data member, which gets 
    set in the constructor. You will need a public getter to 
    retrieve the return value post construction 
******************************************************/ 

class MyClass 
{ 
    private Boolean boolReturnVal; 

    public Boolean GetReturnVal() { return(boolReturnVal); } 
    MyClass() // constructor with possibly args 
    { 
     //sets the return value boolReturnVal 
    } 

public static void main(String args[]) 
{ 
    MyClass myClass = new MyClass(); 

    if (myClass.GetReturnVal()) 
    { 
     //success 
    } 

} 

}

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