Error 类
在程序出现错误时抛出的错误对象。
Error
对象代表程序员本应避免的程序错误。
示例包括使用无效参数调用函数,甚至使用错误数量的参数调用,或者在不允许的时间调用它。
这些不是调用者应期望或捕获的错误——如果发生,程序有误,终止程序可能是最安全的响应。
当决定一个函数应该抛出错误时,应明确描述其发生条件,并且这些条件应该是可检测和可预测的,以便使用此函数的程序员可以避免触发错误。
此类描述通常使用“必须”或“禁止”等词语来描述条件,如果在函数的文档中看到这样的词语,则不满足这些要求很可能导致抛出错误。
示例(来自 String.contains)
`startIndex` must not be negative or greater than `length`.
在这种情况下,如果 startIndex
为负或太大,将抛出错误。
如果在调用函数之前无法检测这些条件,则被调用的函数不应抛出 Error
。它仍然可以抛出,但调用者必须捕获抛出的值,实际上使其成为一个替代结果而不是错误。如果是这样,我们认为抛出的对象是一个 异常 而不是错误。抛出的对象可以选择实现 Exception 以记录它表示一个异常,但不是错误的发生,但实现 Exception 除了记录外没有其他作用。
Dart 中可以抛出所有非 null
值。扩展 Error
类的对象会特别处理:第一次抛出时,会记录并存储抛点处的堆栈跟踪,存储在错误对象中。可以使用 stackTrace getter 获取它。仅实现 Error
而不扩展它的错误对象不会自动存储堆栈跟踪。
错误对象还用于系统范围内的失败,如堆栈溢出或内存不足的情况,用户也不期望捕获或处理这些失败。
由于错误不是为被捕获而创建的,因此没有必要让子类区分错误。相反,创建子类是为了使相关错误组易于通过一致的错误消息创建。例如,如果 String.contains 方法的 startIndex
不在 0..length
范围内,它将使用 RangeError,这可以通过 RangeError.range(startIndex, 0, length)
程序创建。捕获 Error 的特定子类不是预期的,也不应该在测试您自己的代码之外发生。
构造函数
- Error()
属性
- hashCode → int
- 此对象的哈希码。没有设置器继承
- runtimeType → Type
- 对象的运行时类型的表示。没有设置器继承
- stackTrace → StackTrace?
- 该错误首次抛出时的堆栈跟踪。无设置器
方法
-
noSuchMethod(
Invocation invocation) → dynamic - 当访问不存在的方法或属性时被调用。继承
-
toString(
) → String - 此对象的字符串表示形式。继承
运算符
-
operator ==(
Object other) → bool - 等号运算符。继承
静态方法
-
safeToString(
Object? object) → String - 安全地将值转换为 String 描述。
-
throwWithStackTrace(
Object error, StackTrace stackTrace) → Never - 抛出带有相关堆栈跟踪
stackTrace
的error
。