Ответ
Для сигнализации о недопустимом аргументе используется 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в самый неожиданный момент. Так что валидируй, блядь, не ленись.