2013-01-08 45 views
6

Possible Duplicate:
What is the difference between java.lang.Void and void?सामान्य प्रकार के स्विंगवर्कर को शून्य के रूप में सेट करना?

मैं void के रूप में दोनों अंतिम और मध्यवर्ती परिणाम प्रकार के साथ SwingWorker के लिए एक ठोस वर्ग बनाना चाहता था। मैं निम्नलिखित कोड लिखा है:

class AnswerWorker extends SwingWorker<void, void> { 
    protected void doInBackGround() { 
     System.out.println("what is your problem!!"); 
    } 
} 

यह मैं निम्न त्रुटि दिया:

Multiple markers at this line- 
    Syntax error on token "void", Dimensions expected after this token. 
    Syntax error on token "void", Dimensions expected after this token. 

हालांकि जब मैं voidVoid करने (यानी छोटे v राजधानी V के लिए), यह ठीक काम किया से कोड बदल गया है, हालांकि मुझे अभी भी doInBackground() विधि के अंत में return null; पर मजबूर होना पड़ा था।

यह क्यों है? मैं जानता हूँ कि Voidjava.lang पैकेज में एक वर्ग है, लेकिन दस्तावेज़ (कम से कम नहीं है जो मैं का पालन कर सकते हैं: पी) इसके बारे में ज्यादा कहते हैं यह नहीं है कि पहले से

Thanx !!

+0

और महत्वपूर्ण दो पैरामीटर हो सकते हैं, क्या वास्तव में mKorbel

उत्तर

11

class AnswerWorker extends SwingWorker<Void, Void>
चाल चलाना चाहिए। ऐसा इसलिए है क्योंकि जेनिक्स को हमेशा पैरामीटर के रूप में वस्तुओं की आवश्यकता होती है। वे प्राइमेटिव भी नहीं ले सकते हैं। Void इस मुद्दे से छुटकारा पाने के लिए एक रैपर की तरह है।

अब कारण आपको कुछ वापस करने की आवश्यकता क्यों है:
जैसा कि प्रलेखन कहता है, Void अभी भी एक कक्षा है। तो आपको अभी भी एक ऑब्जेक्ट वापस करने की आवश्यकता है। चूंकि यह अनजान है, इसलिए null लौटने की संभावना है। तो Voidvoid कीवर्ड की तरह पूरी तरह से नहीं है। किसी वस्तु के संदर्भ को वापस करने की आवश्यकता अभी भी है (इस मामले में शून्य संदर्भ)।

एक महत्वपूर्ण बात है: जेनिक्स आपको वस्तुओं का उपयोग करने के लिए मजबूर करता है।void, आदिम प्रकारों की तरह, एक वस्तु नहीं है। यही कारण है कि जावा के शुद्ध OOP स्वभाव है;)

3

java.lang.Void वर्ग मूल रूप से निरंतर Void.TYPE, Class उद्देश्य यह है कि void प्रकार का प्रतिनिधित्व करता है डाल करने के लिए एक जगह के रूप जेनरिक से पहले लंबे समय से पेश किया गया था, और जो void विधियों (के लिए java.lang.reflect.Method.getReturnType() द्वारा दिया जाता है Integer.TYPE, Character.TYPE, आदि के अनुरूप द्वारा int, char, ...) का प्रतिनिधित्व करते हैं।

Void वर्ग instantiated नहीं किया जा सकता है (इसलिए केवल मान्य मान आप प्रकार Void के एक चर को असाइन कर सकते null है), लेकिन यह किया गया इस तरह की स्थितियों के लिए एक उपयोगी निशानी के रूप में जेनरिक की शुरूआत के बाद सह का विकल्प चुना है जहां सिंटैक्स को कक्षा का नाम चाहिए लेकिन आप वास्तव में एक का उपयोग नहीं करना चाहते हैं।

+0

क्या आप मुझे 'स्विंगवर्कर' के संदर्भ में इस वाक्य की पुष्टि करने के लिए कुछ आधिकारिक/आधिकारिक दस्तावेज़ीकरण के लिए इंगित कर सकते हैं ?: _it को जेनिक्स के परिचय के बाद सह-चुना गया है इस तरह की परिस्थितियों के लिए उपयोगी टोकन जहां वाक्यविन्यास को कक्षा का नाम चाहिए लेकिन आप वास्तव में एक_ का उपयोग नहीं करना चाहते हैं। –

+0

@ जैमहब्लुटज़ेल मैं नहीं कर सकता, मैंने "सह-चुनावी" शब्द का अर्थ यह इंगित करने के लिए किया कि यह एक आधिकारिक सिफारिश के बजाय एक अनौपचारिक सम्मेलन है।यदि आप हमेशा 'शून्य' वापस करने जा रहे हैं तो इससे कोई फर्क नहीं पड़ता कि आप किस वर्ग का उपयोग करते हैं, लेकिन 'शून्य' एक उपयोगी सम्मेलन है। वही सम्मेलन ['java.util.concurrent.RecursiveAction'] द्वारा उपयोग किया जाता है (https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/RecursiveAction.html), यह एक" नतीजतन "फोर्कजोइन टास्क 'जो हमेशा' शून्य 'देता है, इसलिए यह' फोर्कजोइन टास्क 'बढ़ाता है। –

+0

तथ्य यह है कि 'शून्य' का उपयोग कर मानक जावा एपीआई में एक वर्ग है, जैसे कि मेरे लिए काफी आधिकारिक संदर्भ लगता है। धन्यवाद!। –