2016-08-29 6 views
5

मैं अपना स्कैला बीन बना रहा हूं जो एक वाईएमएल कॉन्फ़िगरेशन से लोड होने वाली कॉन्फ़िगरेशन है, मैं चाहता हूं कि एक लंबी संपत्ति निर्दिष्ट न हो, लेकिन मुझे नीचे का सामना करना पड़ रहा है मुद्दा। कोई विचार क्यों?स्कैला लांग में क्यों नल व्हीलर में प्रारंभ नहीं किया जा सकता है क्योंकि इंटेगर

startOffset: Integer = null 
scala> var endOffset: Long = null 
<console>:11: error: an expression of type Null is ineligible for implicit conversion 
    var endOffset: Long = null 
         ^` 

पुनश्च: हाँ, मैं Option[Long] का उपयोग लेकिन स्पष्टता चाहता था और वहाँ कुछ भी इस दृष्टिकोण के साथ गलत है सकते हैं।

+0

हाँ, वहाँ कुछ इस दृष्टिकोण के साथ गलत है। 'नल' जावा से दुर्भाग्यपूर्ण विरासत है और मूल स्कैला कोड में कभी भी इसका उपयोग नहीं किया जाना चाहिए। आप केवल रन-टाइम त्रुटियों के लिए भीख मांग रहे हैं। – Malvolio

उत्तर

10

स्कैला Long जावा में long जैसे शाब्दिक दिनांक प्रकार है। Int के लिए भी यही सच है। लेकिन Integer एक आवरण वर्ग यानी java.lang.Integer

आप नल लांग मूल्य चाहते हैं, आप का उपयोग कर सकते है java.lang.Long

+0

मैंने क्लास डीफ़ के आधार पर ऐसा किया। यह इतना भ्रमित बीटीडब्ल्यू है! क्या यह इरादा है या सिर्फ एक निरीक्षण है? – mukh007

+0

यह दो नीतियों के बीच सिर्फ एक टक्कर है: स्कैला में प्रकार पूंजीकृत हैं, यहां तक ​​कि इंट और लांग जैसे प्राइमेटिव भी हैं, और java.lang से सबकुछ डिफ़ॉल्ट रूप से उपलब्ध है। – Malvolio

8

Int और Long स्काला प्रकार के होते हैं और AnyVal से प्राप्त कर रहे है, जो एक संदर्भ प्रकार (यानी AnyRef नहीं नहीं है) और इसलिए null नहीं हो सकता है। Integer दूसरी तरफ java.lang.Integer के लिए उपनाम है, जो एक संदर्भ प्रकार है।

नहीं, यह एक निरीक्षण नहीं है, Int और Long का उपयोग कर स्काला में nullnull केवल जावा संगतता (यहां तक ​​कि AnyRef के लिए) और साथ ही Integer के लिए मौजूद है, के रूप में मैं इसे समझ में एक बुरी बात माना जाता है और, संगत कर रहे हैं,।

1

स्कैला में, scala.Null टाइप करें सभी संदर्भ प्रकारों का एक उप प्रकार (सभी प्रकार जो scala.AnyRef से प्राप्त होते हैं - जो java.lang.Object का उपनाम है)। यही कारण है कि आप null मान (scala.Null टाइप करें) कहीं भी संदर्भ प्रकार की अपेक्षा कर सकते हैं।

हालांकि, यह किसी भी प्रकार के प्रकार का उप प्रकार नहीं है (प्रकार जो scala.AnyVal से प्राप्त होते हैं)। क्योंकि scala.Int, scala.Long, scala.Boolean ... (जावा के आदिम प्रकारों के अनुरूप) प्रकार प्रकार हैं, वे शून्य नहीं हो सकते हैं।

Integer प्रकार आप का उल्लेख के लिए के रूप में: मुझे लगता है कि इस java.lang.Integer, जो java.lang.Object (यानी scala.AnyRef) की एक उप-प्रकार है: यह एक संदर्भ प्रकार है ताकि आप null उपयोग कर सकते हैं।

यह शायद स्काला प्रकार पदानुक्रम (the official documentation से उठाया) के इस चित्र के साथ समझने के लिए आसान है: Scala types hierarchy

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