trait NotNull {}
मैं देखना कैसे इस विशेषता गारंटी ले सकते हैं कि कुछ रिक्त नहीं है की कोशिश कर रहा है और मैं यह समझ नहीं कर सकते हैं:नॉटनुल विशेषता 2.8 में कैसे काम करती है और क्या कोई वास्तव में इसका उपयोग करता है?
def main(args: Array[String]) {
val i = List(1, 2)
foo(i) //(*)
}
def foo(a: Any) = println(a.hashCode)
def foo(@NotNull a: Any) = println(a.hashCode) //compile error: trait NotNull is abstract
def foo(a: Any with NotNull) = println(a.hashCode) //compile error: type mismatch at (*)
और:
val i = new Object with NotNull //compile-error illegal inheritance
वहाँ जाहिर है कुछ विशेष कंपाइलर उपचार चल रहा है क्योंकि यह संकलित करता है:
trait MyTrait {}
def main(args: Array[String]) {
val i: MyTrait = null
println(i)
}
जबकि यह करता है नहीं es:
def main(args: Array[String]) {
val i: NotNull = null //compile error: found Null(null) required NotNull
println(i)
}
संपादित करें:वहाँ मैं स्काला में प्रोग्रामिंग में मिल सकता है इस बारे में कुछ नहीं
वैल ए: नोटनुल = "asdf"। 2.7.5 कंपाइलर को क्रैश करता है: थ्रेड "अपवाद" में अपवाद java.lang.AssertionError: दावा विफल: प्रकार erro r: इकाई में संदर्भ (java.lang.String) से संदर्भ (scala.NotNull) में कनवर्ट नहीं कर सकता –
'NotNull' वास्तव में अभी तक काम नहीं करता है। जहां तक मुझे पता है, यह प्रगति पर है, स्कैला 2.7 में 'मेनिफेस्ट' की तरह। –
@Daniel - ठीक है, यह दस्तावेज़ों के अनुसार 2.5 में से भाषा में रहा है, इसलिए मुझे लगता है कि इसे अभी तक काम करना चाहिए या बस हटा दिया जाना चाहिए! –