Класс Error
Объекты Error, выбрасываемые при сбое программы.
Объект Error представляет собой сбой программы, которого программист должен был избежать.
Например, вызов функции с недопустимыми аргументами, с неверным количеством аргументов или в момент, когда её вызов не разрешён.
Вызывающая сторона не должна ожидать или перехватывать такие ошибки: если они возникают, программа содержит ошибку, и самым безопасным решением может быть её завершение.
Решая, должна ли функция выбрасывать ошибку, следует чётко описать условия её возникновения; эти условия должны быть обнаруживаемыми и предсказуемыми, чтобы программист, использующий функцию, мог избежать ошибки.
В таких описаниях для обозначения условий часто используются слова «должен» или «не должен». Если вы видите такие слова в документации функции, несоблюдение этого требования, скорее всего, приведёт к выбрасыванию ошибки.
Пример (из String.contains):
`startIndex` must not be negative or greater than `length`.
В этом случае ошибка будет выброшена, если startIndex отрицательно или слишком велико.
Если условия нельзя обнаружить до вызова функции, вызываемая функция не должна выбрасывать Error. Она всё же может выбросить значение, но вызывающей стороне придётся перехватить его, фактически рассматривая его как альтернативный результат, а не как ошибку. В таком случае выброшенный объект считается исключением, а не ошибкой. Выброшенный объект может реализовать Exception, чтобы указать, что он представляет собой исключительное, но не ошибочное событие; однако реализация Exception не имеет иных последствий, кроме документирования.
В Dart можно выбросить любые значения, не являющиеся null. Объекты, наследующие класс Error, обрабатываются особым образом: при первом выбрасывании записывается трассировка стека в точке выбрасывания и сохраняется в объекте ошибки. Её можно получить с помощью геттера stackTrace. Объект ошибки, который только реализует Error, но не наследует его, не будет автоматически сохранять трассировку стека.
Объекты ошибок также используются для системных сбоев, например переполнения стека или нехватки памяти, которые пользователь также не должен перехватывать или обрабатывать.
Поскольку ошибки не предназначены для перехвата, подклассам не нужно различать типы ошибок. Вместо этого подклассы созданы для того, чтобы было проще создавать группы связанных ошибок с согласованными сообщениями. Например, метод String.contains использует RangeError, если его startIndex находится вне диапазона 0..length; такой объект ошибки легко создать с помощью RangeError.range(startIndex, 0, length). Перехват определённых подклассов Error не предполагается и не должен применяться вне тестирования собственного кода.
- Реализуют
- AbstractClassInstantiationError
- ArgumentError
- AssertionError
- AsyncError
- CastError
- ConcurrentModificationError
- CyclicInitializationError
- FallThroughError
- JsonUnsupportedObjectError
- NoSuchMethodError
- NullThrownError
- OutOfMemoryError
- RemoteError
- StackOverflowError
- StateError
- TypeError
- UnimplementedError
- UnsupportedError
Конструкторы
- 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с соответствующей трассировкой стекаstackTrace.
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-core/Error-class.html