我有以下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.
class X[T1 <: AnyRef] {
var _x : T1 = null
}
Run Code Online (Sandbox Code Playgroud)
如果您希望它可以为空,请替换T1 <: AnyRef为T1 >: Null.
为什么会这样?
Nothing是一个子类型AnyRef,并且Nothing不可为空.
| 归档时间: |
|
| 查看次数: |
1659 次 |
| 最近记录: |