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

Scala – Option.getOrElse()“类型擦除”?

发布时间:2020-12-16 18:27:37 所属栏目:安全 来源:网络整理
导读:我试图使用Option.getOrElse()方法,但它返回Etiher Any或 ScalaObject,而不是Option参数化的正确类的实例.我找不到任何关于这个问题的提及,它似乎不应该存在.我究竟做错了什么? class MyClass { def isOk = true}val myVal = Some(new MyClass) // :Option[
我试图使用Option.getOrElse()方法,但它返回Etiher Any或 ScalaObject,而不是Option参数化的正确类的实例.我找不到任何关于这个问题的提及,它似乎不应该存在.我究竟做错了什么?

class MyClass {

  def isOk = true

}

val myVal = Some(new MyClass) // :Option[MyClass]

val check = myVal.getOrElse(false).isOk

无法调用isOk方法,因为它尝试在Any上调用它.

解决方法

您正尝试在MyClass和Boolean(Any)的基类上调用方法isOk.

试试这个:

scala> class MyClass(b: Boolean) { def isOk = b }
defined class MyClass

scala> val myVal = Some(new MyClass(true))
myVal: Some[MyClass] = Some(MyClass@35d56bbe)

scala> myVal.map{_.isOk}.getOrElse(false)
res0: Boolean = true

scala> myVal.getOrElse(new MyClass(false)).isOk
res1: Boolean = true

(编辑:李大同)

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

    推荐文章
      热点阅读