gpt4 book ai didi

dart - dart:如何在编译期间捕获TypeError

转载 作者:行者123 更新时间:2023-12-03 03:49:12 25 4
gpt4 key购买 nike

下面的代码引发运行时错误。TypeError: Instance of 'FormatException': type 'FormatException' is not a subtype of type 'CustomException'为什么Test(e)在编译时不会失败,因为e的类型是Exception而预期的是CustomException。如何执行它,以至于无法在其中传递Exception

abstract class CustomException implements Exception {
String get code;
}

class Test {
final CustomException ex;
Test(this.ex);
}

void main() {
try {
throw new FormatException();
} on Exception catch (e) {
final t = Test(e);
print('message: $t');
}
}

最佳答案

Dart(目前)具有从父类型到子类型的隐式转换。在知道您正在做什么的前提下,允许使用表达式,该表达式是所需的实际类型的父类(super class)型。
在这里,您有一个静态类型为Exception(已捕获的e)的值,并将该值传递给需要CustomException的构造函数,后者是Exception的子类型。
该语言允许这样做,但是会插入运行时向下转换(等效于e as CustomException)。该转换失败,因为该值实际上是FormatException
借助即将到来的null安全功能,除了dynamic之外,所有隐含的向下转换都将被删除(因为dynamic始终会关闭静态类型检查)。发生这种情况时,Test(e)调用将变得无效。在此之前,此代码将编译并在运行时失败。
在此之前,您可以通过在 analysis_options.yaml 文件中对其进行配置来使分析器对隐式调用发出警告。

关于dart - dart:如何在编译期间捕获TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64339130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com