【问题标题】:Dart What is the difference between throw and rethrow?Dart throw 和 rethrow 有什么区别?
【发布时间】:2020-12-04 21:32:11
【问题描述】:

这可能很明显,但我仍然无法理解 throwrethrow 之间的区别,什么时候应该使用它们?

【问题讨论】:

    标签: flutter exception dart try-catch throw


    【解决方案1】:

    根据Effective Dart

    如果您决定重新引发异常,最好使用rethrow 语句,而不是使用throw 引发相同的异常对象。 rethrow 保留异常的原始堆栈跟踪。另一方面,throw 将堆栈跟踪重置为最后抛出的位置。

    最大的不同是保留了原始堆栈跟踪。


    他们提供了 2 个示例来展示预期用途:

    不好:

    try {
      somethingRisky();
    } catch (e) {
      if (!canHandle(e)) throw e;
      handle(e);
    }
    

    好:

    try {
      somethingRisky();
    } catch (e) {
      if (!canHandle(e)) rethrow;
      handle(e);
    }
    

    【讨论】:

    • 这正是我在谷歌上发现的,仍然不明白,当我看的是ResoCoder关于处理异常的视频时,我更加困惑了。
    • @TersterWordp 你不明白什么?
    • 如果我使用throw e 而不是rethrow,stackTrace 会发生什么变化?您能否提供一个个人示例,说明您何时会使用其中任何一种?
    • @TersterWordp This question 显示了原始堆栈跟踪丢失的示例,答案显示了 rethrow 如何保留它。只需尝试这样的事情并查看堆栈跟踪的差异就会很明显。
    猜你喜欢
    • 2012-02-27
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 2018-02-27
    • 2020-12-20
    • 1970-01-01
    相关资源
    最近更新 更多