Java шаблон для интерфейсов и RuntimeExceptions - PullRequest
1 голос
/ 14 апреля 2020

Я использую следующий шаблон в моем проекте.

public interface Foo {
  // When given a positive number, double it
  public Integer doublePositiveNumber(int number);
}
public class FooImpl {
  public Integer doublePositiveNumber(int number) {
    if (number < 0) {
      throw new IllegalArgumentException("number must be positive")
    }
    return number * 2;
  }
}

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

Я думал о нескольких подходах к решению этой проблемы:

1) Ничего не делать, этот шаблон нормальный и нормальный

2) Вместо этого выведите специально проверенное исключение. Это неудобно, поскольку IllegalArgumentException идеально подходит для этой ошибки.

3) Добавьте «throws IllegalArgumentException» в сигнатуру метода. Сканер java с качеством кода, который я использую в своем проекте, утверждает, что выбрасывание RuntimeException в сигнатуру, как это, является запахом кода, и его следует избегать.

Я надеялся, что кто-нибудь может пролить свет на это, если есть это хороший пример того, что я хочу сделать. Я не могу сказать, переусердствую ли я в своих вещах или правильно думаю об этой ситуации.

1 Ответ

1 голос
/ 14 апреля 2020

Я бы сделал ваше собственное проверенное исключение - что-то вроде «NegativeNumberException», так как оно описывает причину этой ошибки.

RuntimeError s, как IllegalArgumentException, как правило, должны создаваться в случае программиста ошибка - если вы ожидаете, что он будет перехвачен, то вам следует использовать проверенный.

Вы всегда можете добавить соединение Javado c с аннотацией @throws, но лучше, чем вы описываем, чтобы иметь компилятор barf, когда вызывающая сторона не может обработать исключение.

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