加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 为什么Option的orNull方法有这个多余的隐式参数?

发布时间:2020-12-16 08:48:54 所属栏目:安全 来源:网络整理
导读:我想知道(隐式ev:Null: A1)的原因是什么: sealed abstract class Option[+A] extends Product with Serializable { def orNull[A1 : A](implicit ev: Null : A1): A1 = this getOrElse null ...} 岂不 def orNull[A]: A = this getOrElse null 考虑到它似
我想知道(隐式ev:Null<:< A1)的原因是什么:

sealed abstract class Option[+A] extends Product with Serializable { 
  def orNull[A1 >: A](implicit ev: Null <:< A1): A1 = this getOrElse null
  ...
}

岂不

def orNull[A]: A = this getOrElse null

考虑到它似乎甚至不适用于像这样的值类型

Option(1).orNull

Option(1).getOrElse(null)

呢?

选项source code

解决方法

并非所有scala类型都可以为null.特别是,Any有两个孩子,AnyRef和AnyVal. AnyRef可以处理null类型. AnyVal类型可以是JVM上的原语,因此不能为null.隐式是一种延迟类型检查,允许Option [String]使用orNull而不是Option [Int].

注意:Int的盒装/非盒装对象/原语的这种二分法在Scala中有非常奇怪的表现形式,例如null.asInstanceOf [Int] == 0 // true.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读