首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scala类型约束不允许为空

Scala类型约束不允许为空
EN

Stack Overflow用户
提问于 2012-06-27 05:05:15
回答 4查看 2.2K关注 0票数 8

我有以下Scala代码:

代码语言:javascript
运行
复制
class X[T1 <: AnyRef] {
   var _x : T1 = null 
}

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

代码语言:javascript
运行
复制
error: type mismatch;
found   : Null(null)
required: T1
var _x : T1 = null : T1

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-27 05:12:22

而不是

代码语言:javascript
运行
复制
var _x : T1 = null

使用

代码语言:javascript
运行
复制
var _x : T1 = _

来自Scala语言规范的解释:

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

0如果T是Int或其子范围类型之一,

如果T很长,

0.0f如果T是浮点型,

0.0d如果T是双倍的,

如果T是布尔值,则为false,

()如果T是单位,

对于所有其他类型,为null。

票数 11
EN

Stack Overflow用户

发布于 2012-06-27 23:51:52

代码语言:javascript
运行
复制
class X[T1 <: AnyRef] {
   var _x : T1 = null 
}

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

为什么会发生这种情况?

NothingAnyRef的子类型,Nothing不能为空。

票数 9
EN

Stack Overflow用户

发布于 2013-04-05 05:44:07

如果您希望强制要求泛型参数必须为空,则可以将下限设置为Null类型:

代码语言:javascript
运行
复制
class X[T1 >: Null] {
   var _x : T1 = null
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11215915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档