我有以下Scala代码:
class X[T1 <: AnyRef] {
var _x : T1 = null
}代码_x = null突出显示为错误:
error: type mismatch;
found : Null(null)
required: T1
var _x : T1 = null : T1如果我添加Null类型约束,一切都会正常工作。为什么会发生这种情况?Scala将AnyRef定义为java.lang.Object的等价物,当然,它可以为空。
发布于 2012-06-27 05:12:22
而不是
var _x : T1 = null使用
var _x : T1 = _来自Scala语言规范的解释:
变量定义var x: t=_只能作为模板的成员出现。它引入了一个类型为T的可变字段和一个默认初始值。默认值取决于类型T,如下所示:
0如果T是Int或其子范围类型之一,
如果T很长,
0.0f如果T是浮点型,
0.0d如果T是双倍的,
如果T是布尔值,则为false,
()如果T是单位,
对于所有其他类型,为null。
发布于 2012-06-27 23:51:52
class X[T1 <: AnyRef] {
var _x : T1 = null
}如果您希望它可以为空,请用T1 >: Null替换T1 <: AnyRef。
为什么会发生这种情况?
Nothing是AnyRef的子类型,Nothing不能为空。
发布于 2013-04-05 05:44:07
如果您希望强制要求泛型参数必须为空,则可以将下限设置为Null类型:
class X[T1 >: Null] {
var _x : T1 = null
}https://stackoverflow.com/questions/11215915
复制相似问题