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