trait NotNull {}
Я пытался понять, как эта черта может гарантировать, что что-то не является нулевым, и я не могу этого понять:
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)
}
В то время как это не так:
def main(args: Array[String]) {
val i: NotNull = null //compile error: found Null(null) required NotNull
println(i)
}
РЕДАКТИРОВАТЬ: я ничего об этом не могу найти в программировании на Scala
NotNull
пока действительно не работает. Насколько мне известно, это работа, во многом похожая наManifest
в Scala 2.7. - person Daniel C. Sobral   schedule 25.02.2010NotNull
устарел: issues.scala-lang.org/browse/SI- 7247 - person Mike Morearty   schedule 30.06.2013