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 方法将使用 RangeError,如果其 startIndex
不在 0..length
范围内,这可以通过 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 - 抛出带有相关堆栈跟踪的
error
。