Какое значение имеет отсутствие членов в абстрактном классе? - PullRequest
0 голосов
/ 04 августа 2020

Exception класс выглядит так:

abstract class Exception {
  factory Exception([var message]) => _Exception(message);
}

_Exception класс является его реализацией. Как видите, в этом классе не объявлено никаких полей или функций, кроме конструктора фабрики, так в чем же смысл наличия таких классов?

1 Ответ

2 голосов
/ 05 августа 2020

Это похоже на интерфейс маркера , который сообщает читателю , что подкласс предназначен для использования в качестве исключения (создается в ситуации, когда ожидается, что пользователь поймает и обработает исключительная ситуация, а не ошибка).

Dart, язык, Exception специально не обрабатывает. Это совершенно не нужно с технической точки зрения, так как все предметы можно бросить. Создание в вашем классе реализации Exception означает, что должна быть выбрана его цель , даже если это не Error, но вы должны рассматривать это как документацию, а не то, что ваша программа может осмысленно использовать.

Исключения, в отличие от Error s, предназначены для перехвата и обработки , точно так же, как и возвращаемое значение. Исключение должно содержать достаточно информации, чтобы получатель мог сделать что-то значимое. Из-за этого вы не должны никогда генерировать простой Exception в производственном коде (так что конструктор действительно устарел, за исключением времени разработки, пока вы не создадите правильный класс исключения).

Аналогично , вы никогда не должны поймать простой Exception (не on Exception catch (e) {...}), потому что тогда вы не решаете настоящую проблему. Если вы просто хотите поймать что-нибудь , используйте on Object, потому что код может генерировать любой класс, и не все классы исключений должны реализовывать Exception.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...