Scala NotNull特性在2.8中是如何工作的?是否有人实际使用它?

Scala NotNull特性在2.8中是如何工作的?是否有人实际使用它?,scala,nullable,scala-2.8,Scala,Nullable,Scala 2.8,我一直在试图了解这种特质如何保证某些东西不是空的,我无法理解: trait NotNull {} 以及: 显然有一些特殊的编译器处理正在进行,因为它编译: val i = new Object with NotNull //compile-error illegal inheritance 鉴于此不: trait MyTrait {} def main(args: Array[String]) { val i: MyTrait = null println(i) } 编辑:我在S

我一直在试图了解这种特质如何保证某些东西不是空的,我无法理解:

trait NotNull {}
以及:

显然有一些特殊的编译器处理正在进行,因为它编译:

val i = new Object with NotNull //compile-error illegal inheritance
鉴于此不:

trait MyTrait {}

def main(args: Array[String]) {
  val i: MyTrait = null
  println(i)
}
编辑:我在Scala编程中找不到这方面的内容

尝试并出错:

def main(args: Array[String]) {
  val i: NotNull = null //compile error: found Null(null) required NotNull
  println(i)
} 
以及Scala语言参考:

如果该成员的类型 符合scala.NotNull,即 成员的值必须初始化为 值不同于null,否则为空 抛出scala.UnitializedError


对于每个类类型T,使得TNotNull尚未完成。其目的是将其发展为一种检查非空性的可用方法,但目前还没有。目前我不会使用它。我没有具体的预测什么时候能完成,只是2.8.0版不会实现。

val a:NotNull=“asdf”。使2.7.5编译器崩溃:线程“main”java.lang.AssertionError中出现异常:断言失败:类型erro r:无法在unit
NotNull
中从引用(java.lang.String)转换为引用(scala.NotNull)。据我所知,它正在工作中,很像Scala 2.7中的
Manifest
。@Daniel-好吧,根据文档,它从2.5开始就使用该语言,所以我认为它现在应该可以工作了,或者干脆删除它!开始于2007年1月5日:这是可以理解的,但据我所知,这是他们确实希望以可用的方式实现的。再说一次,我可能完全错了。这的推论是,那么。为什么scala自己的类(例如
List
不扩展
NotNull
特性?如果您在Java(和其他语言)中实现scala特性,那么另一个问题是“您使用这个特性吗?”NotNull特性将被忽略。另一个方面是@NotNull注释和静态代码分析将出现在Java 7中。没有其他理由不在Scala libs中使用它。你使用这个特性吗?没有。我遗漏了问题的这一部分。我说它从2.5开始就出现在库/语言中了吗?它没有很好地反映出有fescala中的atures不起作用。虽然我无法回答它在2.9.1中是否可用,但我可以补充说,它从2.11.0开始就被弃用,计划删除,但仍在2.12.6中,目前在GitHub上的2.13分支中删除。此外:它在PR#5683中被删除,包括在2017年4月的2.13.0里程碑1中:
def main(args: Array[String]) {
  val i: NotNull = null //compile error: found Null(null) required NotNull
  println(i)
} 
scala> class A extends NotNull
defined class A

scala> val a : A = null
<console>:5: error: type mismatch;
 found   : Null(null)
 required: A
       val a : A = null
                   ^

scala> class B
defined class B

scala> val b : B = null
b: B = null
scala> new Object with NotNull
res1: java.lang.Object with NotNull = $anon$1@39859

scala> val i = new Object with NotNull
i: java.lang.Object with NotNull = $anon$1@d39c9f