Scala类型约束不允许null

Kon*_*tov 6 null types scala

我有以下Scala代码:

class X[T1 <: AnyRef] {
   var _x : T1 = null 
}
Run Code Online (Sandbox Code Playgroud)

代码_x = null突出显示为错误:

error: type mismatch;
found   : Null(null)
required: T1
var _x : T1 = null : T1
Run Code Online (Sandbox Code Playgroud)

如果我添加Null类型约束一切正常.为什么会这样?Scala将AnyRef定义为java.lang.Object的等价物,当然,它可以为空.

Geo*_*edy 10

代替

var _x : T1 = null
Run Code Online (Sandbox Code Playgroud)

使用

var _x : T1 = _
Run Code Online (Sandbox Code Playgroud)

Scala语言规范的解释:

变量定义var x:T = _只能作为模板的成员出现.它引入了一个带有类型T和默认初始值的可变字段.默认值取决于类型T,如下所示:

0如果T是Int或其子范围类型之一,
如果T为Long
则为0L,如果T为
Flo ,则为0.0f,如果T为Double则为0.0d,
如果T为布尔值则为假,
()如果T为Unit,
则为(),对于所有其他类型为null T.


Dan*_*ral 6

class X[T1 <: AnyRef] {
   var _x : T1 = null 
}
Run Code Online (Sandbox Code Playgroud)

如果您希望它可以为空,请替换T1 <: AnyRefT1 >: Null.

为什么会这样?

Nothing是一个子类型AnyRef,并且Nothing不可为空.