2013-07-12 7 views
21

क्या मेरे द्वारा बनाए गए वर्गों के लिए ऑटोबॉक्सिंग का उपयोग करने का कोई तरीका है? उदाहरण के लिए, मेरे पास Number का उप-वर्ग है। UnsignedInteger i = 88;:क्या कक्षाएं बनाने के लिए ऑटोबॉक्सिंग संभव है?

public class UnsignedInteger extends Number { 
    int n; 

    public UnsignedInteger(int n) { 
     if(n >= 0) 
      this.n = n; 
     else 
      throw new IllegalArgumentException("Only positive integers are supported"); 
    } 
} 

अब, UnsignedInteger i = new UnsignedInteger(88); काम करता है बिल्कुल ठीक है, लेकिन वहाँ इस संकलन बनाने के लिए किसी भी तरह से है? यह मेरे लिए नहीं होगा। अग्रिम में धन्यवाद!

+0

इस प्रश्न के लिए अच्छी खबर। मैंने उपर्युक्त वाक्यविन्यास के लिए समर्थन जोड़ने के लिए ओरेकल को एक फीचर अनुरोध दायर किया है। आइए उम्मीद करते हैं कि यह स्वीकार हो जाता है। – Boggartfly

उत्तर

16

संक्षेप में, नहीं। संकलन करने के लिए कोई रास्ता नहीं है।

जावा केवल पूर्व परिभाषित मुक्केबाजी रूपांतरणों के सीमित सेट को परिभाषित करता है।

JLS, section 5.1.7 से:

मुक्केबाजी रूपांतरण इसी संदर्भ प्रकार के भाव को आदिम प्रकार के भाव बदल देता है। मुक्केबाजी रूपांतरण विशेष रूप से, निम्नलिखित नौ रूपांतरण कहा जाता है:

  • प्रकार बूलियन से प्रकार बाइट से बूलियन

  • टाइप करने के लिए कम प्रकार से बाइट

  • टाइप करने के लिए लघु टाइप करने के लिए

  • टाइप प्रकार से टाइप करने के लिए वर्ण

  • प्रकार int से प्रकार लंबे से पूर्णांक

  • टाइप करने के लिए प्रकार नाव से टाइप करने के लिए लंबे समय से

  • टाइप करने के लिए

  • प्रकार पर दो से अशक्त प्रकार

    को अशक्त प्रकार से टाइप करने के लिए डबल

  • फ्लोट

इसके अतिरिक्त, एक हो सकता है इस रूपांतरण को करने के लिए = ऑपरेटर को अधिभारित करने के बारे में सोचें, लेकिन ऑपरेटर ओवरलोडिंग जावा में समर्थित नहीं है, सी ++ के विपरीत, जहां यह संभव होगा।

तो जावा में आपका रूपांतरण संभव नहीं है।

+0

हम सोच सकते हैं कि जावा ऑपरेटर +, *, या /, - लेकिन वास्तव में इसके साथ संचालन के लिए ऑटोबॉक्सिंग को अधिभारित करता है। ऑरैकल spec https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html देखें – kelgwiin

1

संक्षेप में: नहीं, यह संभव नहीं है। इसके लिए काम करने के लिए, आपको ऑपरेटर अधिभार की आवश्यकता है, जो जावा में उपलब्ध नहीं है। link देखें।

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