在将类型赋值为"null"之前必须约束什么类型?

The*_*aul 3 null types scala scala-2.8

trait Link[This] {
    var next:This = null
}
Run Code Online (Sandbox Code Playgroud)

给出"类型不匹配;找到:Null(null)required:this"

所以我可能需要告诉类型检查器,这将是一个可以指定为null的类型.我该怎么做呢?

(如果在提出这样的问题之前有一个我应该先阅读的网站,请指出我.我目前已经完成了Scala编程第二版的预印本的部分内容)

Jea*_*nal 8

您必须约束This为超类Null- 这是告诉编译器该null类型的有效值的方式.(事实上,思考Any,AnyRef并且AnyVal只有muddles问题-只问你想要的东西编译)

trait Link[This >: Null] {
  var next:This = null
}
Run Code Online (Sandbox Code Playgroud)

但是,我建议你避免使用null,你可以使用Option[This]和影响None- 这样的结构将允许你使用模式匹配,并且是一个非常强烈的声明,使用此字段的客户应该期望它可能没有价值.

trait Link[This] {
  var next:Option[This] = None
}
Run Code Online (Sandbox Code Playgroud)