Дарт: Нет спецификации сообщения для исключения? - PullRequest
1 голос
/ 07 марта 2019

Я изучаю дартс уже пару недель и решил поработать над классом числовых векторов для практических целей. Этот класс требует UnequalVectorLengthException.

Я исследовал исключения в dart, прочитал документацию, но был удивлен, обнаружив, что не существует метода по умолчанию, такого как getMessage(), как в java. Я знаю, что вы можете добавить сообщение при возникновении исключения, но я чувствую, что должно быть сообщение по умолчанию, «привязанное» к экземпляру исключения, которое вы можете получить при его перехвате. Это заставляет меня думать, что реализация может / должна быть:

class UnequalVectorLengthException implements Exception {}

, что выглядит странно и неправильно для моего глаза Java. Тогда бросок, вероятно, будет:

if(stuff) throw UnequalVectorLengthException("Vectors are unequal length");

Я также видел, как люди добавляли дополнительные методы, такие как String errorMessage() {}, но, поскольку пользователь этого исключения может не ожидать, что этот метод будет существовать, я не думаю, что это лучший способ сделать это.

Мой вопрос: является ли приведенный выше код правильным способом реализации исключения в dart (в этом случае подойдет простой комментарий) или существует лучший способ реализации исключения?

1 Ответ

2 голосов
/ 08 марта 2019

Определение класса выглядит хорошо. Строка throw не будет работать, так как у этого класса нет конструктора, который принимает строку. Аргумент message для Exception таков, что он может иметь хороший .toString() в тех случаях, когда вы не хотите беспокоиться о создании более определенного типа.

Не каждый подкласс Exception нуждается или должен иметь message. Если есть смысл в конкретном случае, вы можете добавить его. В вашем примере я не буду беспокоиться о сообщении, потому что оно содержит только повторяющуюся информацию, уже присутствующую в имени класса.

class UnequalVectorLengthException implements Exception {
  @override
  String toString() => 'Vectors are unequal length';
}

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