Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг
ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70% Забронировать скидку
10 Июл 2023
2 мин
216

IllegalArgumentException или NullPointerException при передаче null параметра

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

Одной из распространенных проблем, с которой сталкиваются разработчики на Java, является выбор исключения, которое следует выбросить, когда передается недопустимый параметр в метод. Рассмотрим типичный случай: есть метод, который принимает объект в качестве параметра, и null не считается допустимым значением для этого объекта.

public void setSomeObject(SomeObject someObject) {
    if (someObject == null) {
        // Какое исключение выбросить?
    }
    this.someObject = someObject;
}

В таких случаях два наиболее подходящих исключения — это IllegalArgumentException и NullPointerException. Оба исключения могут быть использованы в этой ситуации, и документация Java подтверждает это.

Однако стоит понимать разницу между ними.

Исключение IllegalArgumentException

IllegalArgumentException означает, что метод был вызван с аргументом, который не является допустимым, но это не обязательно означает, что аргумент равен null. Другими словами, IllegalArgumentException является более общим исключением, которое может быть вызвано любым недопустимым аргументом, а не только null.

Исключение NullPointerException

NullPointerException, с другой стороны, является более конкретным исключением, которое указывает на то, что переменная, которая должна была содержать объект, на самом деле содержит null. Это исключение обычно используется, когда метод ожидает получить объект, но вместо этого получает null.

Какое исключение выбрать?

Выбор между IllegalArgumentException и NullPointerException в значительной степени зависит от конкретной ситуации и предпочтений разработчика. Однако, в целом, если null является единственным недопустимым значением для параметра, то логичнее использовать NullPointerException. Если же параметр может принимать несколько значений, и среди них есть недопустимые, то лучше всего использовать IllegalArgumentException.

Важно помнить, что выбор исключения должен облегчать отладку и понимание кода. Поэтому принимая решение, всегда стоит учитывать, какое исключение будет наиболее информативно и полезно в данной ситуации.

Добавить комментарий

Подарок
Забрать подарок