Какое исключение в Java указывает на передачу недопустимого или некорректного аргумента в метод?

Ответ

Для сигнализации о недопустимом аргументе используется IllegalArgumentException.

Назначение: Это unchecked-исключение (RuntimeException), которое следует выбрасывать, когда метод получает аргумент, значение которого выходит за допустимые пределы или противоречит логике метода.

Типичные сценарии использования:

  • Передача null, когда метод этого не допускает.
  • Передача отрицательного числа, где ожидается положительное.
  • Передача индекса за пределами допустимого диапазона (хотя для коллекций чаще используется IndexOutOfBoundsException, который является подклассом IllegalArgumentException).

Пример реализации с проверкой:

public void setAge(int age) {
    if (age < 0 || age > 150) {
        throw new IllegalArgumentException("Возраст должен быть в диапазоне от 0 до 150. Получено: " + age);
    }
    this.age = age;
}

Почему это важно?

  • Раннее обнаружение ошибок: Проблема выявляется сразу при вызове метода, а не позже в процессе работы.
  • Ясность контракта: Четко документирует, какие значения аргументов являются допустимыми.
  • Best Practice: Следует всегда выполнять валидацию входящих параметров в публичных методах API.

Ответ 18+ 🔞

А, ну вот, смотри, опять про эти ваши исключения. Ну, IllegalArgumentException, блядь. Это ж как в жизни — пришёл ты в магазин, а тебе говорят: «Хуй тебе, а не водка, потому что ты в тапках». Вот это и есть недопустимый аргумент, ёпта.

Зачем оно, это недоразумение? Это исключение, которое кидается, когда методу подсовывают какую-то хуйню вместо нормального аргумента. Не null туда, где его быть не должно, не минус пять лет, и не индекс, который в три раза больше размера списка. Хотя для индексов есть свой, более конкретный урод — IndexOutOfBoundsException, но он, по сути, из этой же семьи, блядь.

Где это применить? Да везде, где твоя логика говорит: «Ну нахуй так нельзя!». Вот смотри, классика жанра:

public void setAge(int age) {
    if (age < 0 || age > 150) {
        throw new IllegalArgumentException("Возраст должен быть в диапазоне от 0 до 150. Получено: " + age);
    }
    this.age = age;
}

Представляешь? Приходит какой-нибудь умник и пытается установить возраст -5 или 999. А ты ему — бац! — IllegalArgumentException прямо в ебало, с пояснением, что он мудак. Красота, да и только.

А почему это, блядь, так важно?

  • Ловим мудаков на входе. Проблема всплывает сразу, а не когда у тебя через два часа работы программы всё накрывается медным тазом, и ты три дня дебажишь, откуда взялось это ебучее значение.
  • Контракт, сука, ясен как божий день. Любой, кто читает твой код или документацию, сразу видит: «Ага, сюда нельзя передавать хуйню, а то получишь по рукам».
  • Это просто правильно, ёпта. Все эти best practices, публичные API... Если метод публичный — ты просто обязан проверить, что тебе в него несут. Иначе потом сам будешь виноват, что какой-то пидорас сломал твою логику, передав null в самый неожиданный момент. Так что валидируй, блядь, не ленись.