Какое стандартное исключение в Java следует использовать, если переданный в метод аргумент недопустим для бизнес-логики сервиса?

«Какое стандартное исключение в Java следует использовать, если переданный в метод аргумент недопустим для бизнес-логики сервиса?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Следует использовать IllegalArgumentException. Это стандартное непроверяемое исключение (RuntimeException), которое ясно указывает на то, что переданный аргумент имеет некорректное или недопустимое значение с точки зрения логики метода.

Пример:

public void validateAndProcess(Order order) {
    if (order == null) {
        throw new IllegalArgumentException("Order cannot be null");
    }
    if (order.getTotalAmount().signum() <= 0) {
        throw new IllegalArgumentException(
            "Order total must be positive. Received: " + order.getTotalAmount()
        );
    }
    // Дальнейшая обработка
}

Почему именно оно:

  • Стандартное и понятное: Часть JDK, его семантика известна всем Java-разработчикам.
  • Непроверяемое: Ошибка программиста или клиента API, не требует обязательного объявления в throws.
  • Информативное: Позволяет передать детальное сообщение о причине ошибки.

Для более специфичных сценариев (например, «Заказ уже обработан») следует создавать собственные бизнес-исключения, наследуясь от RuntimeException.