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

Scala:抛出错误与返回尝试?

发布时间:2020-12-16 09:01:12 所属栏目:安全 来源:网络整理
导读:Scala API是否应该理想地抛出异常或返回Try值?有关于此的官方指南吗? def doSomethingMayThrow(): A = ???def doSomethingWontThrow(): Try[A] = ??? 解决方法 永远不要抛出可恢复错误的异常. 返回表示可能失败的适当数据结构(Future,a Try,Aither等)总是
Scala API是否应该理想地抛出异常或返回Try值?有关于此的官方指南吗?

def doSomethingMayThrow(): A = ???
def doSomethingWontThrow(): Try[A] = ???

解决方法

永远不要抛出可恢复错误的异常.

返回表示可能失败的适当数据结构(Future,a Try,Aither等)总是比在野外抛出异常更可取.它将告知呼叫者失败的可能性,并将强制他们进行管理.

只应针对不可恢复的错误抛出异常,例如硬件故障等.

我们举一个例子:

def throwOnOdds(x: Int): Int =
   if (x % 2 == 0) x / 2 else throw new Exception("foo")

val x = throwOnOdds(41) + 2 // compiles and explodes at runtime

现在,让我们做得更好

def throwOnOdds(x: Int): Try[Int] =
   if (x % 2 == 0) Success(x / 2) else Failure(new Exception("foo"))

val x = throwOnOdds(41) + 2 // doesn't compile

不处理失败会导致编译时错误,这比运行时错误要好.这是如何处理它

throwOnOdds(41) match {
  case Success(n) => // do something with n
  case Failure(e) => // handle exception
}

(编辑:李大同)

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

    推荐文章
      热点阅读