Java Beginner: что использовать с вектором неправильной длины, переданным в качестве аргумента - PullRequest
0 голосов
/ 15 марта 2011

Если у меня есть функция, которая выполняет поэлементное добавление.Как мне работать с несопоставленными длинами векторов: использовать утверждения, IllegalArgumentException, создать собственный класс проверенных исключений или что?

Обратите внимание, что функция находится в библиотеке, которая будет использоваться другими программистами, но очень важно, чтобы, если векторы не совпадали с разработчиком, были уведомлены.

Ответы [ 4 ]

2 голосов
/ 15 марта 2011

Вот эмпирическое правило, которое я использую.

Если это то, что вы ОЖИДАЕТЕ и ОТБИРАЕТЕ, используйте исключение CHECKED.

Если это что-то, что, вероятно, является ОШИБКОЙ ПРОГРАММИРОВАНИЯ и не ожидается, что когда-либо произойдет, используйте исключение RUNTIME.

Вы не сможете по-настоящему оправиться от этого без дополнительного пользовательского ввода, поэтому для меня это звучит как IllegalArgumentException.

1 голос
/ 15 марта 2011

Я бы выбросил исключение IllegalArgumentException. Обязательно задокументируйте это в Javadocs.

/**
 * returns the sum of this vector and another vector.
 * @param other the second summand. It must have the same
 *     length as this vector.
 * @return the sum of both vectors as a new vector.
 * @throws IllegalArgumentException if the two vectors do not have
 *     the same length (i.e. come from different vector spaces).
 */
public Vector plus(Vector other) {
   if (this.length != other.length) {
      throw new IllegalArgumentException("different lengths: " + this.length + "!=" + other.length);
   }
   ...
}

ArithmeticException было бы еще одной возможностью, но я думаю, что `IllegalArgumentException подходит ему лучше.

Проверка с помощью assert обычно отключена и должна быть включена явно, часто только во время тестирования приложения, а не в продуктивном использовании. Таким образом, это подходит только для проверки в закрытых методах, которые всегда должны получать правильные параметры (обеспечивается проверками в вызывающих методах).

0 голосов
/ 15 марта 2011

И IllegalArgumentException, и IndexOutOfBoundsException - хороший выбор. Вы должны задокументировать это и включить длины в сообщение об исключении.

0 голосов
/ 15 марта 2011

Если это тот случай, когда вызывающий абонент сможет восстановиться, тогда выведите проверенное исключение.Если это тот случай, когда вызывающая сторона не сможет восстановиться, создайте исключение Unchecked (например, IllegalArgumentException).Утверждения действительно будут полезны только для отслеживания ошибок в вашем / их коде, так что, вероятно, это неправильный способ решить то, о чем вы говорите.

...